在窗口中绘制最简单的3D程序是什么? 我用C++、OpenGL和WxWIDGET编程。由于不太了解其他编程语言/框架中发生的情况,我遇到了以下问题:
哪种编程语言或编程平台是当今初学3D程序员最简单的编程语言或编程平台?不一定是游戏程序员!通过显示该语言中最简单而不是最小的代码片段,在窗口中绘制正方形/立方体,来演示您的情况。代码应完整且可编译/解释 < C++ > OpenGL和GLUT,这里是红皮书的1-2页OpenGL程序指南:在窗口中绘制最简单的3D程序是什么? 我用C++、OpenGL和WxWIDGET编程。由于不太了解其他编程语言/框架中发生的情况,我遇到了以下问题:,3d,3d,哪种编程语言或编程平台是当今初学3D程序员最简单的编程语言或编程平台?不一定是游戏程序员!通过显示该语言中最简单而不是最小的代码片段,在窗口中绘制正方形/立方体,来演示您的情况。代码应完整且可编译/解释 < C++ > OpenGL和GLUT,这里是红皮书的1-2页OpenGL程序指南: 正如您所看到的,它使用GLUT,这是一个古老的OpenGL窗口框架。我不知道您希望代码如何或为什么比它小 您确实需要明确指定很多内容 您的代码包括: 指定正方形 配置显示模式和投影 指定窗口大小和位置 除了指定
正如您所看到的,它使用GLUT,这是一个古老的OpenGL窗口框架。我不知道您希望代码如何或为什么比它小 您确实需要明确指定很多内容 您的代码包括: 指定正方形 配置显示模式和投影 指定窗口大小和位置
除了指定的信息之外,您没有更多的代码,这是高效表达式的一个很好的定义。如果代码更小,您将无法指定足够的信息来描述您想要做什么。如果您想要GLUT之外的东西,那么您需要使用操作系统提供的OpenGL上下文控件。这在不同的平台上差异很大。在他们的网站上提供了数十个OpenGL教程,并且在第一个教程中,他们向您展示了如何在多个操作系统上创建OpenGL上下文 如果您仍然渴望跨平台兼容性,那么您的最佳选择很可能是,这与GLUT非常相似,因为它在底层抽象上是一个相当薄的层,但它提供了稍微丰富的事件系统,以及更多与硬件(如声音和操纵杆)交互的机会 话虽如此,供过于求并没有什么特别过时的。有许多人供过于求。它的好处是,即使在配置奇怪的主机上,它也几乎肯定会出现,而任何其他解决方案都需要特定于平台的代码或跨平台兼容层。如果我想让一个只需要显示三维图形、只需要鼠标和键盘交互的程序保持简单,那么我可能会对GLUT非常满意
但是如果你想要比这更简单的话?好的,我可能会向您指出一个场景图库,它绑定到一些可解释的语言。如果您想缩小此示例和其他红皮书示例,请不要硬编码颜色、顶点、灯光等信息。确定格式并从文件中读取模型信息。这将使示例更容易理解,最终您将不需要这种硬编码的东西
正如其他海报所指出的,守则的其余部分是必要的。你不必使用GLUT,尽管它没有什么问题——我有点喜欢。您还可以尝试,一组到GLUT、OpenGL、SDL、GLFW和更多的Mono/.Net绑定。两者都是跨平台的。过剩可能是过时的,但我认为它没有得到足够的尊重。该框架是非常通用的,我不确定是否有其他语言或接口在保持其多功能性的同时胜过它。我认为这也是最好的3D图形语言,你可以学到很多其他语言可能隐藏在背后的东西,就像在java学习C++之前。
#include <GL/gl.h>
#include <GL/glut.h>
void display(void)
{
/* clear all pixels */
glClear (GL_COLOR_BUFFER_BIT);
/* draw white polygon (rectangle) with corners at
* (0.25, 0.25, 0.0) and (0.75, 0.75, 0.0)
*/
glColor3f (1.0, 1.0, 1.0);
glBegin(GL_POLYGON);
glVertex3f (0.25, 0.25, 0.0);
glVertex3f (0.75, 0.25, 0.0);
glVertex3f (0.75, 0.75, 0.0);
glVertex3f (0.25, 0.75, 0.0);
glEnd();
/* don't wait!
* start processing buffered OpenGL routines
*/
glFlush ();
}
void init (void)
{
/* select clearing (background) color */
glClearColor (0.0, 0.0, 0.0, 0.0);
/* initialize viewing values */
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}
/*
* Declare initial window size, position, and display mode
* (single buffer and RGBA). Open window with "hello"
* in its title bar. Call initialization routines.
* Register callback function to display graphics.
* Enter main loop and process events.
*/
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (250, 250);
glutInitWindowPosition (100, 100);
glutCreateWindow ("hello");
init ();
glutDisplayFunc(display);
glutMainLoop();
return 0; /* ISO C requires main to return int. */
}