mfc+opengl画几何图形,屏幕坐标与OpenGl坐标关系。

草履虫程序员 2021-05-21 12:49:37
我按照网上的例子,画了这样一个图形。如下图:

对应的OpenGL函数是这样:
glTranslatef(0.0f, 0.0f, -6.0f); //移动物体到显示区
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); //以边线方式绘制三角形
//绘制3个三角形的三个顶点
glBegin(GL_TRIANGLES);
glVertex3f(-0.6f, 0.0f, 0.0f);
glVertex3f(0.6f, 0.0f, 0.0f);
glVertex3f(0.0f, 0.15f, 0.6f);

glVertex3f(-0.6f, 0.0f, 0.0f);
glVertex3f(0.0f, 0.15f, 0.6f);
glVertex3f(0.0f, 0.9f, 0.6f);

glVertex3f(0.0f, 0.9f, 0.6f);
glVertex3f(0.0f, 0.15f, 0.6f);
glVertex3f(0.6f, 0.0f, 0.0f);
glEnd();
关键的是glVertex3f(x,y,z);
这个数值跟屏幕当中的屏幕坐标的关系,想请教这方面的朋友。
我在三角形顶部这里鼠标单击,获取的坐标数值是:如下图所示:

我就想知道,现在我想鼠标任意的画线,这个坐标点确定了,如何转换成opengl的坐标数值,包括模型的坐标值。
...全文
25528 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
草履虫程序员 2021-05-27
  • 打赏
  • 举报
回复
引用 5 楼 schlafenhamster 的回复:
我想鼠标任意的画线 因为 投影的 问题 2D 的 可以 做 3D 的 不行
2D的也可以,能否提供一个最简单例子。
schlafenhamster 2021-05-27
  • 打赏
  • 举报
回复
我想鼠标任意的画线 因为 投影的 问题 2D 的 可以 做 3D 的 不行
schlafenhamster 2021-05-27
  • 打赏
  • 举报
回复
绘制 函数 void pointTriangle (void) { glPointSize(5); glClear (GL_COLOR_BUFFER_BIT); // green point are covered by glColor3f (0.0, 1.0, 0.0);// green glBegin (GL_POINTS);// . . // . glVertex2fv (pt2);// {200,400} x=200 y=400 glVertex2fv (pt3);// {600,400} x=600 y=400 glVertex2fv (pt1);// {400,200} x=400 y=200 glEnd (); glColor3f (1.0, 0.0, 0.0);// red glBegin(GL_LINES); glVertex2fv (pt2); glVertex2fv (pt3); // glVertex2fv (pt3); glVertex2fv (pt1); // glVertex2fv (pt1); glVertex2fv (pt2); glEnd(); // glFlush(); }
schlafenhamster 2021-05-27
  • 打赏
  • 举报
回复
关键在 鼠标 取的 点 和 窗口 一致 void main (int argc, char** argv) { glutInit (&argc, argv); glutInitWindowPosition (180,180);// window glutInitWindowSize (WIN_WIDTH,WIN_HEIGHT);// client glutCreateWindow("triangle"); // 投影 init(); // printf ("Press 1 to 9"); // glutKeyboardFunc(keyFcn); glutMouseFunc(mouse); glutDisplayFunc(pointTriangle); glutIdleFunc(pointTriangle); glutMainLoop(); } #include <stdlib.h> #include <stdio.h> #include <math.h> // #include "glut.h" // #define WIN_WIDTH 600 #define WIN_HEIGHT 600 //GLint number = 1; GLfloat pt1[2] = {300,200};// GLfloat pt2[2] = {100,400};// GLfloat pt3[2] = {500,400}; void init (void) { glClearColor (1.0, 1.0, 1.0, 0.0); glMatrixMode (GL_PROJECTION); // 投影 和窗口 一致 gluOrtho2D(0.0, WIN_WIDTH, 0.0, WIN_HEIGHT); } 检查 点的位置 void mouse(int button, int state, int x, int y) { if (button == GLUT_LEFT_BUTTON) { if (state == GLUT_DOWN) { printf("left x=%d y=%d\n",x,WIN_HEIGHT-y); } } }
草履虫程序员 2021-05-25
  • 打赏
  • 举报
回复
引用 3 楼 schlafenhamster 的回复:
搜索 OpenGL视口变换
网上的代码写进去,基本上没有结果。
schlafenhamster 2021-05-24
  • 打赏
  • 举报
回复
搜索 OpenGL视口变换
草履虫程序员 2021-05-21
  • 打赏
  • 举报
回复
引用 1 楼 schlafenhamster 的回复:
// 目标:测试OpenGL窗口视口坐标 // 结果:glutInitWindowSize(640, 480); 指定的是windows概念中窗口(看得见,可移动, // 最大化,最小化等操作)大小,以像素为单位 . // OpenGL中的窗口和视口是逻辑上的概念,其中窗口范围是画图时指定顶点坐标使用的坐标, // 而视口范围是将windows中概念中实际窗口映射成的范围 #define GLUT_DISABLE_ATEXIT_HACK void myInit(void) { glClearColor(1.0, 1.0, 1.0, 0.0); // 设置背景色为白色 glColor3f(0.0f, 0.0f, 0.0f); // 绘图颜色为黑色 glPointSize(4.0); // 设置点大小为4x4像素 // 1. 如果不做任何处理,OpenGL默认坐标范围为 x=[-1,1] y=[-1,1] // 2. 只指定世界窗口坐标范围,默认视口坐标范围与世界窗口一样,按世界窗口绘图即可 /*glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0, 500, 0.0, 100);*/ // 3. 同时指定世界窗口坐标和视口范围,会发生从世界窗口坐标转换为视口坐标,按世界窗口绘图即可 glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-2, 2, -1, 1); glViewport(73, -250, 11, 100); }
可否转换呢?给一个提示。
schlafenhamster 2021-05-21
  • 打赏
  • 举报
回复
// 目标:测试OpenGL窗口视口坐标 // 结果:glutInitWindowSize(640, 480); 指定的是windows概念中窗口(看得见,可移动, // 最大化,最小化等操作)大小,以像素为单位 . // OpenGL中的窗口和视口是逻辑上的概念,其中窗口范围是画图时指定顶点坐标使用的坐标, // 而视口范围是将windows中概念中实际窗口映射成的范围 #define GLUT_DISABLE_ATEXIT_HACK void myInit(void) { glClearColor(1.0, 1.0, 1.0, 0.0); // 设置背景色为白色 glColor3f(0.0f, 0.0f, 0.0f); // 绘图颜色为黑色 glPointSize(4.0); // 设置点大小为4x4像素 // 1. 如果不做任何处理,OpenGL默认坐标范围为 x=[-1,1] y=[-1,1] // 2. 只指定世界窗口坐标范围,默认视口坐标范围与世界窗口一样,按世界窗口绘图即可 /*glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0, 500, 0.0, 100);*/ // 3. 同时指定世界窗口坐标和视口范围,会发生从世界窗口坐标转换为视口坐标,按世界窗口绘图即可 glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-2, 2, -1, 1); glViewport(73, -250, 11, 100); }

19,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧