gpt4 book ai didi

c++ - 如何找到用于在屏幕上绘制像素并在鼠标单击时返回它们的坐标

转载 作者:行者123 更新时间:2023-12-02 09:58:25 26 4
gpt4 key购买 nike

抱歉这个问题的措辞不好,我不知道我在说什么..
我正在为我的图形类制作一个项目,但我有点陷入了一个问题。

#include <GL/glut.h>
#include <iostream>

void display();
void init();
void reshape(int, int);
void mouseFunc(int, int, int, int);

const int XMAX = 600;
const int YMAX = 600;
const int GRID_SIZE = 20;

int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB);
glutInitWindowPosition(100,100);
glutInitWindowSize(XMAX, YMAX);
glutCreateWindow("test pgm");
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMouseFunc(mouseFunc);
init();
glutMainLoop();
}

void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glPointSize(14); //POINT SIZE

#pragma region draw_here
glBegin(GL_POINTS);

float grid_x = GRID_SIZE - 1;
float grid_y = GRID_SIZE - 1;
for (float x = -grid_x; x < GRID_SIZE; x++)
{
for (float y = grid_y; y > -GRID_SIZE; y--)
{
glVertex2f(x, y);
}
}

glEnd();
#pragma endregion
glFlush();
}

void init()
{
glClearColor(0.0, 0.0, 0.0, 1.0);
}

void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-GRID_SIZE, GRID_SIZE, -GRID_SIZE, GRID_SIZE);
glMatrixMode(GL_MODELVIEW);
}
void mouseFunc(int button, int state, int mouse_x, int mouse_y)
{
int x = -GRID_SIZE - (XMAX / (mouse_x + 1) * 20);
int y = GRID_SIZE - (YMAX / (mouse_y + 1) * 20);
if(state == 0)
std::cout << "button:" << button << "\nstate:" << state << "\n(x,y):(" << x << "," << y << ")\n------\n";
}
Output Window
Console Window
我想要的输出将是我用来在 draw_here 区域的循环中绘制像素的坐标
例如:单击输出窗口左上角的黄色框应该给出坐标(-19、19)。
我正在尝试演示寻路算法,我想画出障碍物并指定开始
并使用鼠标单击结束位置。我最终希望将坐标和相关数据存储在一个数组对象中并根据需要遍历它们,我现在只处于原型(prototype)设计阶段。

最佳答案

计算范围 [-1, 1] 内鼠标的标准化设备空间坐标:

double ndc_x = (double)mouse_x / XMAX * 2.0 - 1.0;
double ndc_y = 1.0 - (double)mouse_y / YMAX * 2.0;
将结果映射到网格范围的范围:
int x = (int)(ndc_x * GRID_SIZE + GRID_SIZE + 0.5) - GRID_SIZE;
int y = (int)(ndc_y * GRID_SIZE + GRID_SIZE + 0.5) - GRID_SIZE;
(-19, -19) 位于左下角, (19, 19) 位于右上角。

关于c++ - 如何找到用于在屏幕上绘制像素并在鼠标单击时返回它们的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64026865/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com