首先得到windows桌面窗口的句柄,把桌面窗口内容截图,计算你的opengl窗口位置以及窗口显示区域大小,将截图上相同部分的内容作为背景给opengl窗口,只要窗口移动就重新绘制背景,这样我想应该可以。不过单纯的opengl开发估计难实现,还是要结合VC++,用windows编程才能调用windows的API函数
这不是几行代码就行解决的问题。3ds max 的模型有很多种导出格式,如max,obj等,是不同的标准。一般来说,模型在各种软件中互导会使用一种各个软件都能自由导入和导出的中间格式,而这种中间格式有很多种,我选择的是obj.
OBJ本是Wavefront用在工作站的格式,现已成为业界标准,几乎现有的知名3D建模软件如3Ds MAX,Maya,Lightware都支持.
在3DS MAX中做好模型后,导出obj文件,保存.
你的C++程序要想把OBJ文件成功导入,必需专门有这样一个类来实现它(建议写一个插件管理器来管里各种插件),这个类要做的事是:1.读取OBJ文件 2.分析OBJ文件,并将其内容转化,重组成OpenGL能识别的模型。比如将用OBJ里的点面转化成OpenGL里的点,面。 这一步是关键,要求你对OBJ和OpenGL都熟练掌握。
3.将转化好的模型保存并渲染,对其进行初始化(如位置,缩放,观察者角度,灯光,贴图等等)。
最后,Good luck!
首先你要建一个3D框架相信你己经有了。接着建一个文件夹,把你要用到的图像放到你的程序文件中。用到纹理 *** 作和加载图像 *** 作:以下是两个主要函数
voidbaisic::Ground()
{
glPushMatrix()
glEnable(GL_TEXTURE_2D)
glBegin(GL_QUADS)
glTexCoord2f(1.0f,1.0f)glVertex3f(-80.0f,0.0f,-80.0f)
glTexCoord2f(0.0f,1.0f)glVertex3f(80.0f,0.0f,-80.0f)
glTexCoord2f(1.0f,0.0f)glVertex3f(-80.0f,0.0f,80.0f)
glTexCoord2f(0.0f,0.0f)glVertex3f(80.0f,0.0f,80.0f)
glDisable(GL_TEXTURE_2D)
glPopMatrix()
}
intbaisic::Load(char*fliename,GLuint&texture)
{
AUX_RGBImageRec*pImage=NULL
pImage=auxDIBImageLoad(fliename)
if(pImage==NULL)
returnfalse
glGenTextures(1,&texture)
glBindTexture(GL_TEXTURE_2D,texture)
gluBuild2DMipmaps(GL_TEXTURE_2D,4,pImage->sizeX,pImage->sizeY,GL_RGB,GL_UNSIGNED_BYTE,pImage->data)
free(pImage->data)
free(pImage)
returnTRUE
}
至于贴图的角度问题:你用旋转函数glRotatef()函数即可.
窗口是3d的里面距窗口还有一定的距离,你可以把Z坐标设置为0;X,Y坐标设置成窗口大小就好了;
很久没编写OpenGL程序了,有些东西忘了,我有个这样的程序,想要的话,给我邮箱传给你;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)