【发布时间】:2018-02-13 16:13:42
【问题描述】:
我可以制作 2D 窗口并绘制点、线等。我想制作一个 3D 窗口,以便我可以通过绘制 3D 点/线来绘制 3D 对象(例如 glVertex3d(x,y,z))(就像 2D glVertex2d(x,y))。
但我无法制作 3D 窗口。我只想制作一个 3D 窗口,为我提供一个绘制 3D 点的平台。
我的二维窗口示例代码 -
#include<GL/gl.h>
#include<GL/glut.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
double x_0 = -100;
double y_0 = -25;
double x_1 = 100;
double y_1 = -25;
double x_2 = 100;
double y_2 = 25;
double x_3 = -100;
double y_3 = 25;
void
drawRectangle()
{
/* Clear the screen */
glClearColor(0, 0, 0, 0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glFlush();
glBegin(GL_LINES);
glVertex2d(x_0, y_0);
glVertex2d(x_1, y_1);
glVertex2d(x_1, y_1);
glVertex2d(x_2, y_2);
glVertex2d(x_2, y_2);
glVertex2d(x_3, y_3);
glVertex2d(x_3, y_3);
glVertex2d(x_0, y_0);
glEnd();
glFlush();
}
void
init(void)
{
/*initialize the x-y co-ordinate*/
glClearColor(0,0,0,0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-320, 319,-240, 239);
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
}
int
main(int argc, char *argv[])
{
double x_0, y_0, x_1, y_1;
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(640, 480);
glutInitWindowPosition(400, 400);
glutCreateWindow("Rectangle in 2D");
init();
drawRectangle();
glutMainLoop();
}
我也尝试跟随,但没有显示该行。
#include<GL/gl.h>
#include<GL/glut.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void
init(void)
{
/*initialize the x-y co-ordinate*/
glClearColor(0,0,0,0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-320, 319, -240, 239, 100, -150);
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
}
int
main(int argc, char *argv[])
{
double x_0, y_0, x_1, y_1;
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(640, 480);
glutInitWindowPosition(400, 400);
glutCreateWindow("Special key");
init();
glBegin(GL_LINES);
glVertex3d(0,0,0);
glVertex3d(0,0,100);
glVertex3d(0,100,0);
glVertex3d(0,100,0);
glEnd();
glFlush();
glutMainLoop();
}
编辑gluOrtho2D 在上述 MWE 中更新为 glOrtho。
【问题讨论】:
-
什么是 3D 窗口?
-
@NicolBolas 允许绘制 3D 点。(例如 drawpixel(x,y,z))
-
为什么你认为这是窗口性质的函数?
-
@NicolBolas 我不关心这个。如果我可以绘制 3D 点就可以了。你可以看到我的 MWE。
-
@helal 没有 3D 窗口之类的东西。这就是您使用投影矩阵的原因:它定义了 3D 坐标到 2D 窗口内的 2D 坐标的映射。提示:
glLoadIdentity();不会删除它。