如何在一个三维空间中画多条垂直于底面的线段....若表达不清楚请回帖提出.在线等待指导...
望各位大虾 不要因为问题简单就...,望不吝赐教...感谢!
望各位大虾 不要因为问题简单就...,望不吝赐教...感谢!
解决方案 »
- 如何请求DSN服务器解析域名 用winsocket
- 如何访问一个汉字识别应用程序中的已经建立好的字库?
- 如何在一个程序中调用另一个命令行程序,并重定向输入的问题。分太多,解决立即结贴
- [求助]终止线程的代码怎么写?
- 如何让对话框程序中的文本控件和输入框控件变灰并不可用?
- 关于向RichEdit里插入Gif图片的问题
- 用ATL写asp组件,能否在ie中显示窗体?
- 谁有POP3的原码和相关中文资料?
- 急!!!
- 111222 快来http://www.csdn.net/expert/topicview1.asp讨论你的程序
- 如何让windows的输出重定位到另一台显示器上?
- VC中使用ADO为什么出错???????????????
用OpenGL吧
int sw=640;
int sh=480;
bool fullscreen =1;
GLfloat aspect;
GLfloat rtri=0.0f;
GLfloat rquad;
GLfloat xrot, yrot, zrot;
GLuint texture[1];#pragma comment(lib,"opengl32.lib")
#pragma comment(lib,"glu32.lib")
#pragma comment(lib,"glaux.lib")AUX_RGBImageRec *LoadBMP(char *filename)
{
FILE *File=NULL;
if (!filename==NULL)
{
return NULL;
}
File=fopen(filename,"r");
if (File)
{
fclose(File);
return auxDIBImageLoad(filename);
}
return NULL;
}
int LoadGLTextures()
{
int Status=FALSE;
AUX_RGBImageRec *TextureImages[1];
memset(TextureImages,0,sizeof(void*)*1);
if (TextureImages[0]=LoadBMP("c:\\tx.bmp"))
{
Status=TRUE;
glGenTextures(1,&texture[0]);
glBindTexture(GL_TEXTURE_2D,texture[0]);
glTexImage2D(GL_TEXTURE_2D,0,3,TextureImages[0]->sizeX,TextureImages[0]->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,TextureImages[0]->data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
}
if (TextureImages[0])
{
if (TextureImages[0]->data)free(TextureImages[0]->data);
free(TextureImages[0]);
}
return Status;
}
void SceneResizeViewPort(GLsizei w,GLsizei h)
{
if(h==0){h=1;}
aspect=(GLfloat)w/(GLfloat)h;
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f,aspect,1.0f,100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
int SceneInit(GLvoid)
{
LoadGLTextures();
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);
glClearColor(0.0,0.0,0.0,0.0);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);
return TRUE;
}
int SceneShow(GLvoid)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
// add your own graph action here.
glTranslatef(-1.5f,1.0f,-9.0f);
glRotatef(xrot,1.0f,0.0f,0.0f);
glRotatef(yrot,0.0f,1.0f,0.0f);
glRotatef(zrot,0.0f,0.0f,1.0f);
glBindTexture(GL_TEXTURE_2D,texture[0]); //glRotatef(rtri,3.0f,2.0f,1.5f); glBegin(GL_QUADS);
glTexCoord2f(0.0f,0.0f);
glVertex3f(-1.0f,-1.0f,1.0f);
glTexCoord2f(1.0f,0.0f);
glVertex3f(1.0f,-1.0f,1.0f);
glTexCoord2f(1.0f,1.0f);
glVertex3f(1.0f,1.0f,1.0f);
glTexCoord2f(1.0f,0.0f);
glVertex3f(-1.0f,1.0f,1.0f);
glEnd();
//
// To draw a cube, we draw six squares as the planes and color them differently.
//
glLoadIdentity();
glTranslatef(1.5f,0.0f,-9.0f);
glRotatef(rquad,1.0f,1.0f,2.0f);
glBegin(GL_QUADS);
glColor3f(0.0f,1.0f,0.0f); // The top plane
glVertex3f(1.0f,1.0f,-1.0f);
glVertex3f(-1.0f,1.0f,-1.0f);
glVertex3f(-1.0f,1.0f,1.0f);
glVertex3f(1.0f,1.0f,1.0f); glColor3f(1.0f,0.5f,0.0f); // The bottom plane
glVertex3f(1.0f,-1.0f,1.0f);
glVertex3f(-1.0f,-1.0f,1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glVertex3f(1.0f,-1.0f,-1.0f); glColor3f(1.0f,0.0f,0.0f); // The front plane
glVertex3f(1.0f,1.0f,1.0f);
glVertex3f(-1.0f,1.0f,1.0f);
glVertex3f(-1.0f,-1.0f,1.0f);
glVertex3f(1.0f,-1.0f,1.0f); glColor3f(1.0f,1.0f,0.0f); // The back plane
glVertex3f(1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f,1.0f,-1.0f);
glVertex3f(1.0f,1.0f,-1.0f); glColor3f(0.0f,0.0f,1.0f); // The left plane
glVertex3f(-1.0f,1.0f,-1.0f);
glVertex3f(-1.0f,1.0f,1.0f);
glVertex3f(-1.0f,-1.0f,1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f); glColor3f(1.0f,0.0f,1.0f); // The left plane
glVertex3f(1.0f,1.0f,1.0f);
glVertex3f(1.0f,-1.0f,1.0f);
glVertex3f(1.0f,-1.0f,-1.0f);
glVertex3f(1.0f,1.0f,-1.0f); glEnd();
//
// To draw a pyramid,we draw three triangles as four planes and a square as the bottom.
// glBegin(GL_TRIANGLES); glColor3f(1.0f,0.0f,0.0f); glVertex3f(0.0f,1.0f,0.0f); // front plane
glColor3f(0.0f,1.0f,0.0f); glVertex3f(-1.0f,-1.0f,1.0f);
glColor3f(0.0f,0.0f,1.0f); glVertex3f(1.0f,-1.0f,1.0f); glColor3f(1.0f,0.0f,0.0f); glVertex3f(0.0f,1.0f,0.0f); // The right plane
glColor3f(0.0f,0.0f,1.0f); glVertex3f(1.0f,-1.0f,1.0f);
glColor3f(0.0f,1.0f,0.0f); glVertex3f(1.0f,-1.0f,-1.0f); glColor3f(1.0f,0.0f,0.0f); glVertex3f(0.0f,1.0f,0.0f); // The back plane
glColor3f(0.0f,1.0f,0.0f); glVertex3f(1.0f,-1.0f,-1.0f);
glColor3f(0.0f,0.0f,1.0f); glVertex3f(-1.0f,-1.0f,-1.0f);
glColor3f(1.0f,0.0f,0.0f); glVertex3f(0.0f,1.0f,0.0f); // The left plane
glColor3f(0.0f,0.0f,1.0f); glVertex3f(-1.0f,-1.0f,-1.0f);
glColor3f(0.0f,1.0f,0.0f); glVertex3f(-1.0f,-1.0f,1.0f);
glEnd();
glBegin(GL_QUADS);
glColor3f(0.0f,1.0f,0.0f); glVertex3f(-1.0f,-1.0f,1.0f); // The bottom plane
glColor3f(0.0f,0.0f,1.0f); glVertex3f(-1.0f,-1.0f,-1.0f);
glColor3f(0.0f,1.0f,0.0f); glVertex3f(1.0f,-1.0f,-1.0f);
glColor3f(0.0f,0.0f,1.0f); glVertex3f(1.0f,-1.0f,1.0f);
glEnd(); glLoadIdentity();
glTranslatef(-1.5f,-2.0f,-8.0f);
glRotatef(rquad,0.0f,1.0f,0.0f); glBegin(GL_TRIANGLES);
glColor3f(0.5f,1.0f,1.0f);
glVertex3f(1.0f,1.0f,-2.0f);
glVertex3f(-0.3f,-0.3f,-1.7f);
glVertex3f(0.3f,-0.3f,-2.0f); glColor3f(0.0f,1.0f,1.0f);
glVertex3f(1.0f,1.0f,-2.0f);
glVertex3f(0.3f,-0.3f,-2.0f);
glVertex3f(-0.3f,-0.3f,-2.3f); glColor3f(1.0f,1.0f,1.0f);
glVertex3f(1.0f,1.0f,-2.0f);
glVertex3f(-0.3f,-0.3f,-2.3f);
glVertex3f(-0.3f,-0.3f,-1.7f);
glEnd();
xrot+=0.3f;
yrot+=0.2f;
zrot+=0.4f; return TRUE;
}
void DisableOpenGL()
{
wglMakeCurrent(NULL,NULL);
wglDeleteContext(hRC);
ReleaseDC(hWnd,hDC);
}
void EnableOpenGL()
{
PIXELFORMATDESCRIPTOR pfd;
int iFormat;
hDC=GetDC(hWnd);
ZeroMemory(&pfd,sizeof(pfd));
pfd.nSize=sizeof(pfd);
pfd.nVersion=1;
pfd.dwFlags=PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER;
pfd.iPixelType=PFD_TYPE_RGBA;
pfd.cColorBits=16;
pfd.cDepthBits=16;
pfd.iLayerType=PFD_MAIN_PLANE;
iFormat=ChoosePixelFormat(hDC,&pfd);
SetPixelFormat(hDC,iFormat,&pfd);
hRC=wglCreateContext(hDC);
wglMakeCurrent(hDC,hRC);
}
bool ChangeResolution(int w,int h,int bitdepth)
{
DEVMODE devMode;
int modeSwitch;
int closeMode=0;
EnumDisplaySettings(NULL,closeMode,&devMode);
devMode.dmBitsPerPel=bitdepth;
devMode.dmPelsWidth=w;
devMode.dmPelsHeight=h;
devMode.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
modeSwitch=ChangeDisplaySettings(&devMode,CDS_FULLSCREEN);
if (modeSwitch==DISP_CHANGE_SUCCESSFUL){return TRUE;}
else
{
ChangeDisplaySettings(NULL,0);
return FALSE;
}
}