用 OpenGL 绘制三角函数图?
Drawing trigonometric graphs with OpenGL?
我正在尝试使用 OpenGL 绘制三角图。这是我的代码的一部分:
double x = -1;
gl.glColor3d(0, 0, 0);
gl.glBegin(gl.GL_LINES);
gl.glVertex2d(x, Math.sin(Math.toRadians(x))*0.01);
gl.glVertex2d(x+0.01, Math.sin(Math.toRadians(x+0.01))*0.01);
gl.glEnd();
x += 0.01;
这部分在我的完整代码中重复出现。执行此操作时,我什么也看不到。谁能告诉我为什么会这样?
我在你的代码中没有看到任何循环
而且尺度也很可疑(没有矩阵很难分辨)试试这个:
double x;
gl.glColor3d(0.0, 0.0, 0.0);
gl.glBegin(gl.GL_LINE_STRIP);
for (x=-180.0;x<=180.0;x+=0.01)
gl.glVertex2d(x/180.0, Math.sin(Math.toRadians(x)));
gl.glEnd();
它使用 LINE_STRIP
而不是 LINES
,并且图表被缩放到 <-1,+1>
,这很可能是您的查看区域...
设置
也可能存在其他问题,如评论所述。在它们之上检查明显的:
gl.glDisable(gl.GL_DEPTH_TEST);
gl.glDisable(gl.GL_TEXTURE_2D);
如果它们是从您代码的其他部分设置的...
相机设置错误
我没有看到任何矩阵代码,所以我希望你的相机朝向正确的方向并且你的图形在平截头体内或者你使用的任何东西...
GL渲染
如果您的 GL 代码丢失或结构错误,则它应该如下所示(将所有项目符号放在一起):
// (double) buffering
gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT); // non eed for the depth although
// here set matrices in case they are not persistent
gl.glMatrixMode(gl.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glMatrixMode(gl.GL_PROJECTION);
gl.glLoadIdentity();
// here set/reset config the pipeline
gl.glDisable(gl.GL_DEPTH_TEST);
gl.glDisable(gl.GL_TEXTURE_2D);
gl.glLineWidth(1.0);
// here render
double x;
gl.glColor3d(0.0, 0.0, 0.0);
gl.glBegin(gl.GL_LINE_STRIP);
for (x=-180.0;x=<180.0;x+=0.01)
gl.glVertex2d(x/180.0, Math.sin(Math.toRadians(x)));
gl.glEnd();
// (double) buffering
gl.glFlush();
SwapBuffers(hdc);
我不在 JAVA 中编写代码,因此不要使用 SwapBuffers(hdc);
中的任何内容来达到相同的目的。希望我在翻译成 JAVA.
时没有犯任何错误
有关详细信息,请参阅:
我正在尝试使用 OpenGL 绘制三角图。这是我的代码的一部分:
double x = -1;
gl.glColor3d(0, 0, 0);
gl.glBegin(gl.GL_LINES);
gl.glVertex2d(x, Math.sin(Math.toRadians(x))*0.01);
gl.glVertex2d(x+0.01, Math.sin(Math.toRadians(x+0.01))*0.01);
gl.glEnd();
x += 0.01;
这部分在我的完整代码中重复出现。执行此操作时,我什么也看不到。谁能告诉我为什么会这样?
我在你的代码中没有看到任何循环
而且尺度也很可疑(没有矩阵很难分辨)试试这个:
double x; gl.glColor3d(0.0, 0.0, 0.0); gl.glBegin(gl.GL_LINE_STRIP); for (x=-180.0;x<=180.0;x+=0.01) gl.glVertex2d(x/180.0, Math.sin(Math.toRadians(x))); gl.glEnd();
它使用
LINE_STRIP
而不是LINES
,并且图表被缩放到<-1,+1>
,这很可能是您的查看区域...设置
也可能存在其他问题,如评论所述。在它们之上检查明显的:
gl.glDisable(gl.GL_DEPTH_TEST); gl.glDisable(gl.GL_TEXTURE_2D);
如果它们是从您代码的其他部分设置的...
相机设置错误
我没有看到任何矩阵代码,所以我希望你的相机朝向正确的方向并且你的图形在平截头体内或者你使用的任何东西...
GL渲染
如果您的 GL 代码丢失或结构错误,则它应该如下所示(将所有项目符号放在一起):
// (double) buffering gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT); // non eed for the depth although // here set matrices in case they are not persistent gl.glMatrixMode(gl.GL_MODELVIEW); gl.glLoadIdentity(); gl.glMatrixMode(gl.GL_PROJECTION); gl.glLoadIdentity(); // here set/reset config the pipeline gl.glDisable(gl.GL_DEPTH_TEST); gl.glDisable(gl.GL_TEXTURE_2D); gl.glLineWidth(1.0); // here render double x; gl.glColor3d(0.0, 0.0, 0.0); gl.glBegin(gl.GL_LINE_STRIP); for (x=-180.0;x=<180.0;x+=0.01) gl.glVertex2d(x/180.0, Math.sin(Math.toRadians(x))); gl.glEnd(); // (double) buffering gl.glFlush(); SwapBuffers(hdc);
我不在 JAVA 中编写代码,因此不要使用
SwapBuffers(hdc);
中的任何内容来达到相同的目的。希望我在翻译成 JAVA. 时没有犯任何错误
有关详细信息,请参阅: