求一个C语言Opengl代码

求一个C语言Opengl代码,第1张

// Bounce.c

/迅毁/ Demonstrates a simple animated rectangle program with GLUT

// OpenGL SuperBible, 2nd Edition

// Richard S. Wright Jr.

#include"stdafx.h"

#include <windows.h>

#include <gl/glut.h>

// Initial square position and size

GLfloat x1 = 100.0f

GLfloat y1 = 150.0f

GLsizei rsize = 50

// Step size in x and y directions

// (number of pixels to move each time)

GLfloat xstep = 1.0f

GLfloat ystep = 1.0f

// Keep track of windows changing width and height

GLfloat windowWidth

GLfloat windowHeight

// Called to draw scene

void RenderScene(void)

{

// Clear the window with current clearing color

glClear(GL_COLOR_BUFFER_BIT)

// Set current drawing color to red

// R GB

glColor3f(1.0f, 0.0f, 0.0f)

// Draw a filled rectangle with current color

glRectf(x1, y1, x1+rsize, y1+rsize)

// Flush drawing commands

glutSwapBuffers()

}

// Called by GLUT library when idle (window not being

// resized or moved)

void TimerFunction(int value)

{

// Reverse direction when you reach left or right edge

if(x1 >windowWidth-rsize || x1 <0)

xstep = -xstep

// Reverse direction when you reach top or bottom edge

if(y1 >windowHeight-rsize || y1 <0)

ystep = -ystep

// Check bounds. This is incase the window is made

// smaller and the rectangle is outside the new

//碧袭 clipping volume

if(x1 >windowWidth-rsize)

x1 = windowWidth-rsize-1

if(y1 >windowHeight-rsize)

y1 = windowHeight-rsize-1

// Actually move the square

x1 += xstep

y1 += ystep

// Redraw the scene with new coordinates

glutPostRedisplay()

glutTimerFunc(33,TimerFunction, 1)

}

//悔昌兄 Setup the rendering state

void SetupRC(void)

{

// Set clear color to blue

glClearColor(0.0f, 0.0f, 1.0f, 1.0f)

}

// Called by GLUT library when the window has chanaged size

void ChangeSize(GLsizei w, GLsizei h)

{

// Prevent a divide by zero

if(h == 0)

h = 1

// Set Viewport to window dimensions

glViewport(0, 0, w, h)

// Reset coordinate system

glMatrixMode(GL_PROJECTION)

glLoadIdentity()

// Keep the square square, this time, save calculated

// width and height for later use

if (w <= h)

{

windowHeight = 250.0f*h/w

windowWidth = 250.0f

}

else

{

windowWidth = 250.0f*w/h

windowHeight = 250.0f

}

// Set the clipping volume

glOrtho(0.0f, windowWidth, 0.0f, windowHeight, 1.0f, -1.0f)

glMatrixMode(GL_MODELVIEW)

glLoadIdentity()

}

// Main program entry point

void main(void)

{

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB)

glutCreateWindow("Bounce")

glutDisplayFunc(RenderScene)

glutReshapeFunc(ChangeSize)

glutTimerFunc(33, TimerFunction, 1)

SetupRC()

glutMainLoop()

}

//是正方形的,你改一下吧~

程序还是自己试着编,这样才会进步,加油哈!

在dev c++的include目录中的gl目录下有三个opengl头文件,分别是gl.h,glu.h,glext.h没有你包含的glut.h所以会提示找不到头文件,改正后连接错误如图 :

可以看出来并没有定义你的main函数里的各种init函数,我在上述三个头文件里也没有找到这些函数,没有这些函数说明没有这些函数的库文件,当然就链接不到了。

dev c++是一个轻量级的IDE,缺少很多进行某项专门开发所需的api函数槐正拦,要进行opengl开发建议你还是找下opengl sdk一类专门清没的开发工具,它们提供完整的这些api函数

如果已经添加了头文件,但是还是出现以上的错误,那你你应该检查是不是添加了所需的扩展库文件(*.a)了,上面的link error是因为虽然头文件有声明但链接不到库文件的原因。glut库解压后包含一个.h,一个.def,一个.lib和一个.dll文件。将.h拷贝到include目录下,.dll拷贝到windows的系统目录下(windows\system32),貌似你只将dll放在系统目录下而没有配置扩展库文件,对于库文件可以使用 reimp工具将.lib文件转换成.a文件。命令如下:

reimp glut32.lib

这样,就会在同一铅胡目录下生成一个glut32.def和一个libglut32.a文件,将libglut32.a拷贝到lib目录下。同时记得要删除原来的glut库(如果有的话),否则link时可能会出错。

上面所说的mingw-utils可在下面的地方下载到,解压后在bin里有reimp

mingw-utils-0.3:

http://sourceforge.net/project/downloading.php?groupname=mingw&ampfilename=mingw-utils-0.3.tar.gz&use_mirror=jaist

OpenGL就是基于C语言的,只需要下载OpenGL的SDK库安装即可,在编写空戚源码时:

喊迹1、添郑亏并加头文件glut.h。

注意glut.h文件中已经包含gl.h,glu.h在实际编译中可以只加入头文件glut.h,很多相关的例子都是这样的,但是在mingwstudio上编译发现,在glut.h前还是需要加入glu.h, gl.h.如:

#include <gl/gl.h>

#include <gl/glu.h>

#include <gl/glut.h>

2、在工程中添加OpenGL的库,有关命令行加入,glu32 opengl32 glut32库就可以编译了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12569129.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存