草庐IT

c++ - 在使用 GLUT 时避免使用全局变量

GLUT是一个很棒的AP​​I,它非常易于使用,但我对它处理范围的方式有些困难。在定义回调时,没有传递参数的选项,所以在我看来,程序员似乎被迫依赖全局变量,我觉得这很难接受。现在我在它自己的模块中拥有所有GLUT代码,在它自己的线程上运行,并定义一个静态指针,我在模块的入口点分配它,如下所示:主模块intmain(intargc,char**argv){intfoo;boost::threadgraphicsThread(glutMain,argc,argv,&foo);//...graphicsThread.join();return0;}GLUT模块staticint*FOO_RE

c++ - 将 1 个参数(指针)传递给 glutDisplayFunc?

我创建了一个虚拟类,它有一个基本的draw()方法,它什么都不做。这样做的目的是能够在OpenGL中绘制自己的其他类、形状和其他东西将继承这个虚拟类,从而允许我创建指向许多不同类的指针数组。这背后的想法是,我希望能够将指向该数组的指针传递到我的glutDisplayFunc回调中。(这恰好被命名为drawScene()。不幸的是,我似乎无法将任何东西传递给它,因为glutDisplayFunc旨在采用一种不带参数且不返回任何内容的方法。有没有办法将参数传递给回调函数,然后将指针传递到我的drawScene函数中?(TLDR?见下文。)本质上我希望能够做到这一点:classa{...};

c++ - 你如何在 osx 上使用 waf 链接 opengl 和 glut?

我正在尝试使用waf在osx上构建一个C++opengl程序,但无法让它工作。通常当我编译一个opengl程序时,我在终端中使用它:g++main.cpp-frameworkGLUT-frameworkOpenGL我使用以下wscript:top='.'out='build'defoptions(opt):opt.load('compiler_cxx')defconfigure(conf):conf.load('compiler_cxx')#conf.env.append_value('LINKFLAGS','-frameworkGLUT-frameworkOpenGL')defbui

c++ - 一张一张打开箱顶

我被要求制作一个顶部有4个三角形的盒子,通过按o和c,盒子顶部的4个三角形将一个接一个打开和关闭。我制作了一个顶部有三角形的盒子,它们同时移动,我试图操纵每个三角形的步骤,希望让它一个一个地打开和关闭,但我得到了卡在算法和代码中。完整代码如下:#include#include#include#include#definePI3.14159265staticintstep=0,step1,step2,step3,step4;/*cameralocationinlongitudeandlatitude*/staticfloatalpha=0.0;staticfloatbeta=PI/6.0

c++ - OpenGL - 围绕 Y 轴旋转 'Curve'

根据我在MathStackexchange上的question:我正在为我的3D图形类(class)做一个项目。该项目是用C++和OpenGL/Glut构建的。基本上,我创建了一个水平矩形窗口,segmentation为两个正方形。在左侧,我有一个二维坐标平面,它允许用户指向并单击并定义轮廓“曲线”。然后我需要将这条曲线围绕Y轴绕n次。那么,有人能指导我如何使用三角函数计算连续点的X和Z值吗?例如,如果用户点击并创建点:(1,1,0)并且它们的扫描分辨率(n)设置为10,然后我需要围绕Y轴每36(360/10)度重绘该点。我假设三角函数会在这方面对我有帮助,我的假设是否正确?如果是这样

c++ - 像真正的风力涡轮机一样旋转物体

#include#include#include"glut.h"voidinit(){glClearColor(0.0,0.0,0.0,0.0);glMatrixMode(GL_PROJECTION);gluOrtho2D(0.0,400,0.0,300.0);}voiddrawTurbine(){//drawthetowerglBegin(GL_LINES);glColor3f(1.0,1.0,1.0);glVertex2f(160,40);glVertex2f(163,180);glVertex2f(160,40);glVertex2f(175,40);glVertex2f(175

c++ - 如何让相机跟随 opengl 中的 3d 对象?

我是第一次使用opengl进行赛车,我面临的第一个问题是如何让相机以恒定的距离跟随汽车。这是键盘功能的代码。V是速度汽车。voidOnSpecial(intkey,intx,inty){floatstep=5;switch(key){caseGLUT_KEY_LEFTa:carAngle=step;V.z=carAngle;camera.Strafe(-step/2);break;caseGLUT_KEY_RIGHT:carAngle=-step;V.z=carAngle;camera.Strafe(step/2);break;caseGLUT_KEY_UP:V.x+=(-step);

c++ - 在 OpenGL 中绘制多个形状

#include#include#pragmacomment(lib,"glut32.lib")#pragmacomment(lib,"glu32.lib")#pragmacomment(lib,"opengl32.lib")#pragmacomment(linker,"/subsystem:\"windows\"/entry:\"mainCRTStartup\"")boolinit(void){glClearColor(0.0f,0.0f,0.0f,0.5f);glMatrixMode(GL_PROJECTION);//Setgridtobefrom0to1gluOrtho2D(0.

c++ - 用鼠标在 OpenGL GLUT 中绘制多边形

我想在openGLGlut中通过鼠标交互绘制一个多边形,每次左键单击都将是一个顶点,并且将在每个顶点之间绘制一条线。单击鼠标右键时,多边形将关闭从最后一个顶点到第一个顶点绘制一条线。我想到了这个,但它似乎不起作用。voiddraw_polygon(intbutton,intstate,intx,inty){boolright_pushed=0;glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_POINTS);if(button==GLUT_LEFT_BUTTON&&state==GLUT_DOWN){p1.x=x;p1.y=480-y;//ifrighti

c++ - OpenGL:一个简单的过剩立方体没有光

OpenGL:简单的过剩立方体没有光嗨,我正在尝试研究opengl和glut中的灯光,但我很早就遇到了问题。我有这段代码,用于使用自定义相机设置在自定义位置制作发光立方体:voidtestApp::draw(){   staticfloatamb[]= {0.4,0.4,0.4,0.0};   staticfloatdif[]= {1.0,1.0,1.0,0.0};      floatlight_diffuse[]={1.0,0.0,1.0,1.0};   floatlight_position[]={-1.0,1.0,1.0,0.0};//itriedalotofpositions