Tag: opengl

如何在OpenGL中创建廉价阴影?

我有两个型号,A和B,还有一个灯,L。我想模型A在模型B上投下阴影。我不想打扰阴影体积或适当的阴影,只是一个简单的圆形阴影就足够了。 效果是模型A被视为用于阴影投射目的的球体。 以下是我设想算法的方法: 对于模型B中的每个三角形,绘制三角形。 沿着从L到A的直线在三角形上投影圆,根据三角形的距离增加圆的大小。 确保圆圈被剪切到三角形的边界(我想,以某种方式使用模板缓冲区)。 我正在使用OpenGL和简单的C. 我可以阅读一些参考文档的指针吗? 还是提出想法?

Point Sprites用于粒子系统

点精灵是构建粒子系统的最佳选择吗? 新版本的OpenGL和最新图形卡的驱动程序中是否存在点精灵? 或者我应该使用vbo和glsl吗?

在openGL中使用glGenBuffers时的空白屏幕

#include #include #include #include void changeSize(int w, int h) { if(h == 0) h = 1; float ratio = w / h; glMatrixMode(GL_PROJECTION); glLoadIdentity(); glViewport(0, 0, w, h); gluPerspective(40,ratio,1.5,20); glMatrixMode(GL_MODELVIEW); } void renderScene(void) { glClear(GL_COLOR_BUFFER_BIT ); glLoadIdentity(); glTranslatef(0.0,0.0,-5.0); glDrawArrays(GL_TRIANGLES,0,3); glutSwapBuffers(); } void init() { GLfloat verts[] = { 0.0, 1.0, -1.0, -1.0, 1.0, -1.0 }; […]

在OpenGL中更改投影

我在调整GLUT窗口大小时遇到​​了麻烦。 我想打印一个矩形但是当我使用resizefunction时,我似乎无法在窗口中绘制和塑造。 我有以下代码,当我调整窗口大小时我想改变方形的宽度,但如果高度resize,我不希望它的高度改变。 #include #include #include /* globals */ GLsizei wh = 500, ww = 500; /* initial window size */ GLfloat size = 3.0; /* half side length of square */ void myinit(void) { glClearColor(0.0,0.0,1.0,1.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0,1,0,1.0,-1.0,1.0); glViewport(0,0,ww,wh); } /* display callback — required by GLUT 3.0 */ void renderScene(void) { glClear(GL_COLOR_BUFFER_BIT | […]

可以从纹理生成法线贴图吗?

如果我有纹理,那么可以为这个纹理生成法线贴图,那么它可以用于凹凸贴图吗? 或者通常如何制作法线贴图?

模拟绘画应用的画笔笔触

我正在尝试编写一个应用程序,可以使用模拟笔刷创建看起来像绘画的图片。 模拟画笔笔划的简单方法有什么好的来源吗? 例如,给定用户拖动鼠标的鼠标位置列表,画笔宽度和画笔纹理,如何确定要绘制到canvas的内容? 我尝试在鼠标移动的方向上调整画笔纹理,并沿着路径轻拍几个画笔纹理图像,但它看起来不太好。 我想我错过了刷子纹理应该缩小并在角落上生长的东西。 任何简单的链接将不胜感激。 我发现了关于模拟例如油画的复杂学术论文,但我只想要一个基本的算法,如果可能的话会产生好的结果。

我如何链接GLFW

我想把GLFW链接到我的C程序。 文档似乎建议#include但是我已经安装了2.7.2(来自我的发行版的存储库)并且没有该头文件: find / -name *glfw* 2> /dev/null /usr/lib/libglfw.so.2.6 /usr/lib/libglfw.a /usr/lib/libglfw.so /usr/lib/pkgconfig/libglfw.pc /usr/lib/libglfw.so.2 /usr/include/GL/glfw.h /usr/share/doc/libglfw-dev /usr/share/doc/libglfw2 /var/cache/apt/archives/libglfw2_2.7.2-1_i386.deb /var/cache/apt/archives/libglfw-dev_2.7.2-1_i386.deb /var/lib/dpkg/info/libglfw2.list /var/lib/dpkg/info/libglfw2.postinst /var/lib/dpkg/info/libglfw-dev.md5sums /var/lib/dpkg/info/libglfw2.postrm /var/lib/dpkg/info/libglfw2.md5sums /var/lib/dpkg/info/libglfw2.shlibs /var/lib/dpkg/info/libglfw-dev.list 我试过#include但我仍然得到undefined reference to ‘glfwLoadTexture2D’ 如何链接到GLFW并使用glfwLoadTexture2D() ?

使用bresenham线算法编译错误?

#include #include #include int x0,y0,xn,yn; void bresenham(void) { int dx,dy,m,pk,xk,yk,k; glClear(GL_COLOR_BUFFER_BIT); glColor3f(0,0,0); setPixel(x0,y0); dx=xn-x0; dy=yn-y0; pk=2*dy-dx; m=dy/dx; xk=x0; yk=y0; if(m>0 && m<1) { for(k=0;k<dx-1;k++) { if(pk<0) { xk++; pk=pk+2*dy; } else { xk++; yk++; pk=pk+2*dy-2*dx; } setPixel(xk,yk); } } glFlush(); } int main (int argc,char **argv) { printf("enter starting points"); scanf("%d",&x0); scanf("%d",&y0); printf("enter endpoints"); scanf("%d",&xn); […]

如何让我的相机朝着我面向的方向移动

我正在尝试在OpenGL中制作一个免费的漫游相机。 目前,相机向前,向后,向左和向右移动。 我的下一个目标是让它朝你所看的方向移动。 到目前为止,我的代码是: float yawRad = Rotation -> y * (3.1415f/180); float pitchRad = Rotation -> x * (3.1415f/180); if(myInput.Keys[VK_W]) //Forward { curPos->x += sin(yawRad) * myInput.Sensitivity; curPos->z -= cos(yawRad) * myInput.Sensitivity; } else if(myInput.Keys[VK_S]) //Backward { curPos->x -= sin(yawRad) * myInput.Sensitivity; curPos->z += cos(yawRad) * myInput.Sensitivity; } if(myInput.Keys[VK_A]) //Left { curPos->x -= cos(yawRad) […]

使用openGL截取屏幕截图并将其另存为png

我正在尝试全屏截图并将其保存为png。 我在这里找到了一个代码并对其进行了一些修改。 对于屏幕截图,我使用openGL和Glut以及在png中保存c的gd库。 我得到的只是一个黑色的png,我无法弄清楚为什么。 我在stackoverflow中搜索并发现了一些post,但不幸的是他们没有帮助。 其中一个是使用glReadBuffer(GL_FRONT); 而不是glReadBuffer(GL_BACK); 我尝试了两个都没有成功。 这是我的代码: int SVimage2file(char *filename){ int width = glutGet(GLUT_SCREEN_WIDTH); int height = glutGet( GLUT_SCREEN_HEIGHT); FILE *png; GLubyte *OpenGLimage, *p; gdImagePtr image; unsigned int r, g, b; int i,j,rgb; png = fopen(filename, “wb”); if (png == NULL) { printf(“*** warning: unable to write to %s\n”,filename); return 1; } OpenGLimage […]