www.pudn.com > stlreader.rar > ShowFirstRight.cpp
// ShowFirstRight.cpp : implementation file
//
#include "stdafx.h"
//#include "RecordSyetem.h"
//#include "ShowFirstRight.h"
#include "ShowFirstRight.h"
#include "3DModel.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CShowFirstRight
extern C3DModel m_Model;
CShowFirstRight::CShowFirstRight()
{
/*CString sfile1,sfile2;
sfile1.Format("%s","res\\xie2.bmp");
sfile2.Format("%s","res\\xie1.bmp");
m_foot.Init(sfile1,sfile2);
m_Model.InitModel();
m_Model.ScaleFoot(m_foot.m_Heigth,m_foot.m_Width,1);
*/
/* CString sfile1,sfile2;
sfile1.Format("%s","res\\xie2.bmp");
sfile2.Format("%s","res\\xie1.bmp");
m_foot.Init(sfile1,sfile2);
m_Model.InitModel();
m_Model.ScaleFoot(m_foot.m_Heigth,m_foot.m_Width,1);
*/
//initopengl();
m_IsMoving =false;
isfirst =true;
}
CShowFirstRight::~CShowFirstRight()
{
}
BEGIN_MESSAGE_MAP(CShowFirstRight, CWnd)
//{{AFX_MSG_MAP(CShowFirstRight)
ON_WM_PAINT()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CShowFirstRight message handlers
BOOL CShowFirstRight::Create(DWORD dwStyle, CRect& rect, CWnd* pParent, UINT id)
{
BOOL result ;
result = CWnd::CreateEx(NULL ,
NULL, NULL, dwStyle,
rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top,
pParent->GetSafeHwnd(), (HMENU)id) ;
if( !result )
AfxMessageBox("Error creating window");
m_rcImgWnd.top = m_rcImgWnd.left = 0;
m_rcImgWnd.bottom = m_rcImgWnd.top + rect.Height();
m_rcImgWnd.right = m_rcImgWnd.left + rect.Width();
//m_MemDC为CDC类的一个对象.
m_MemDC.CreateCompatibleDC(GetDC());// 创建什么东西?
return result;
}
void CShowFirstRight::SetImage(HBITMAP *hbp)
{
m_bpImageWnd.Attach(hbp);
m_bIsSetImage = TRUE ;
this->Invalidate();
}
void CShowFirstRight::OnPaint()
{
PaintFoot(m_zangle,-m_xangle);
//CWnd::OnPaint();
//int i,j,k;
/*if(m_bIsSetImage)
{
m_MemDC.SelectObject(m_bpImageWnd);
dc.BitBlt(0,0,m_rcImgWnd.Width(),m_rcImgWnd.Height(),&m_MemDC,0,0,SRCCOPY);
}
*/
// glutInitDisplayModel(GLUT_SINGLE|GLUT_RGB);
//glutInitWindowSize(500,500);
// glutInitWindowPosition(100,100);
/* glClearColor(0.2,0.2,0.2,0.8);
glShadeModel(GL_FLAT);
::glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glLoadIdentity();
//gluLookAt(0,0,5,0,0,0,0,1,0);
//gluLookAt(0,0,5/100,0.04,0,0,0,1/100*yaxi,0.03*xaxi);
glScalef(0.003,0.003,0.003);
glRotatef(0.5,1,0,0);
glRotatef(0,0,1,0);
glRotatef(0.4,0,0,1);
glColor3f (0.5,0.8,1.0);
//glBegin(GL_POINTS);
//glVertex3f( 0.4f, 0.5f, 0.0f);
//glColor3f(1.0f,0.0f,0.0f);
//glVertex3f(-0.4f,-0.5f, 0.0f);
//画出第一只脚
/*glBegin(GL_POINTS);
for(i=0;i=m_foot.m_maxY[i])
continue;
for( k=m_foot.m_minY[i];k<=m_foot.m_maxY[i];k++)
{
//j =i;
GLfloat x1,x2;
GLfloat y1,y2;
GLfloat z1,z2;
z1 =(GLfloat)(k)/1;
x1 =(GLfloat)(i-m_foot.m_origey2)/1;
y1 =(GLfloat)j/1;
glVertex3f(z1,x1,0);
//glVertex3f(-0.4f,-0.5f,0.0f);
}
}
glEnd();
*/
//glVertex3f( 1.0f,-1.0f, 1.0f);
//glVertex3f(-100,-100,0);
//glVertex3f( 100,100,0);
//ReadData();
/*glBegin(GL_POINTS);
for (i=0;i<10000;i++)
{
glVertex3f(m_Model.m_nTrueList[i][0],m_Model.m_nTrueList[i][1],m_Model.m_nTrueList[i][2]);
//glVertex3f(0.4,0.5,0);
//glVertex3f(-0.4,-0.5,0);
}
glEnd();
//m_Model.DrawNurbs(0);
//m_Model.Draw3DModel(0);
//glViewport(100,100,500,500);
glFlush();
glEnd();
::glFinish();*/
//glRotatef(100,0.0f,1.0f,0.0f);
//glLoadIdentity();
//glTranslatef(0,0.0f,0.5f);
//glRotatef(0.5,0.0f,1.0f,0.0f);
//glViewport(0,0,500,400);
//设置投影方式
/*glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//透视投影
gluPerspective(45.0f,1.0f,0.01f,1000.0f);
//设置观察方式
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// glColor3f(0,1,0);
glColor3f (0.5,0.8,1.0);
const GLfloat white[]={ 1.0,1.0,1.0,1.0};
glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,white);
//gluLookAt(70.0,50.0,70.0,0.0,0.0,0.0,0.0,1.0,0.0);
*/
//gluLookAt(70.0,50.0,70.0,0.0,0.0,0.0,0.0,1.0,0.0);
//glLineWidth(1.0f); // ssj
//SwapBuffers( m_hDC );
}
void CShowFirstRight::OnMouseMove(UINT nFlags, CPoint point)
{
if(m_IsMoving)
{
m_xangle =point.x-m_origePoint.x;
m_zangle =point.y-m_origePoint.y;
this->Invalidate(true);
}
}
void CShowFirstRight::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_IsMoving =TRUE;
if(isfirst)
{
m_origePoint =point;
isfirst =false;
}
CWnd::OnLButtonDown(nFlags, point);
}
void CShowFirstRight::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_IsMoving =FALSE;
CWnd::OnLButtonUp(nFlags, point);
}
void CShowFirstRight::PaintFoot(int xaxi,int zaxi)
{
//int length =m_foot.m_footlength;
int i,j,k;
// glutInitDisplayModel(GLUT_SINGLE|GLUT_RGB);
//glutInitWindowSize(500,500);
// glutInitWindowPosition(100,100);
glClearColor(0.2,0.2,0.2,0.8);
glShadeModel(GL_FLAT);
::glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glLoadIdentity();
//gluLookAt(0,0,5,0,0,0,0,1,0);
//gluLookAt(0,0,5/100,0.04,0,0,0,1/100*yaxi,0.03*xaxi);
glScalef(0.003,0.003,0.003);
glRotatef(xaxi,1,0,0);
glRotatef(zaxi,0,0,1);
glColor3f (0.5,0.8,1.0);
//glBegin(GL_POINTS);
//glVertex3f( 0.4f, 0.5f, 0.0f);
//glColor3f(1.0f,0.0f,0.0f);
//glVertex3f(-0.4f,-0.5f, 0.0f);
//画出第一只脚
/*glBegin(GL_POINTS);
for(i=0;i=m_foot.m_maxY[i])
continue;
for( k=m_foot.m_minY[i];k<=m_foot.m_maxY[i];k++)
{
//j =i;
GLfloat x1,x2;
GLfloat y1,y2;
GLfloat z1,z2;
z1 =(GLfloat)(k)/1;
x1 =(GLfloat)(i-m_foot.m_origey2)/1;
y1 =(GLfloat)j/1;
glVertex3f(z1,x1,0);
//glVertex3f(-0.4f,-0.5f,0.0f);
}
}
glEnd();
*/
//glVertex3f( 1.0f,-1.0f, 1.0f);
//glVertex3f(-100,-100,0);
//glVertex3f( 100,100,0);
//ReadData();
/*for (i=0;i<10000;i++)
{
glVertex3f(m_Model.m_nTrueList[i][0],m_Model.m_nTrueList[i][1],m_Model.m_nTrueList[i][2]);
//glVertex3f(0.4,0.5,0);
//glVertex3f(-0.4,-0.5,0);
}*/
//m_Model.DrawNurbs(0);
m_Model.Draw3DModel(0);
//glViewport(100,100,500,500);
glFlush();
glEnd();
::glFinish();
//glRotatef(100,0.0f,1.0f,0.0f);
//glLoadIdentity();
//glTranslatef(0,0.0f,0.5f);
//glRotatef(0.5,0.0f,1.0f,0.0f);
//glViewport(0,0,500,400);
//设置投影方式
/*glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//透视投影
gluPerspective(45.0f,1.0f,0.01f,1000.0f);
//设置观察方式
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// glColor3f(0,1,0);
glColor3f (0.5,0.8,1.0);
const GLfloat white[]={ 1.0,1.0,1.0,1.0};
glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,white);
//gluLookAt(70.0,50.0,70.0,0.0,0.0,0.0,0.0,1.0,0.0);
*/
//gluLookAt(70.0,50.0,70.0,0.0,0.0,0.0,0.0,1.0,0.0);
glLineWidth(1.0f); // ssj
SwapBuffers( m_hDC );
}
void CShowFirstRight::initOpengl()
{
//CWnd *p = (CWnd*) GetDlgItem(IDC_IW_INRIGHT);
//m_pDC =p->GetDC();
CString sfile1,sfile2;
sfile1.Format("%s","res\\xie2.bmp");
sfile2.Format("%s","res\\xie1.bmp");
m_foot.Init(sfile1,sfile2);
m_hDC=(this->GetDC())->GetSafeHdc();
PIXELFORMATDESCRIPTOR pfd = {
sizeof(PIXELFORMATDESCRIPTOR), // pfd结构的大小
1, // 版本号
PFD_DRAW_TO_WINDOW | // 支持在窗口中绘图
PFD_SUPPORT_OPENGL | // 支持 OpenGL
PFD_DOUBLEBUFFER, // 双缓存模式
PFD_TYPE_RGBA, // RGBA 颜色模式
24, // 24 位颜色深度
0, 0, 0, 0, 0, 0, // 忽略颜色位
0, // 没有非透明度缓存
0, // 忽略移位位
0, // 无累加缓存
0, 0, 0, 0, // 忽略累加位
32, // 32 位深度缓存
0, // 无模板缓存
0, // 无辅助缓存
PFD_MAIN_PLANE, // 主层
0, // 保留
0, 0, 0 // 忽略层,可见性和损毁掩模
};
int pixelformat;
glEnable(GL_TEXTURE_2D); // 启用纹理映射(新增)
glShadeModel(GL_SMOOTH); // 启用阴影平滑
// 设置深度缓存// 启用深度测试
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
// 所作深度测试的类型// 真正精细的透视修正
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glEnable(GL_NORMALIZE);
glShadeModel(GL_SMOOTH);
glEnable(GL_LIGHTING);
glLineWidth(0.25f);
glPointSize(2.25f);
int m_PixelFormat;
pixelformat = ::ChoosePixelFormat((this->GetDC())->GetSafeHdc(), &pfd);//选择像素格式
::SetPixelFormat((this->GetDC())->GetSafeHdc(), pixelformat, &pfd); //设置像素格式
m_hRC = ::wglCreateContext( m_hDC );
wglMakeCurrent( m_hDC, m_hRC );
GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat mat_shininess[] = { 90.0 };
GLfloat light_position[] = { 1.0, 1.0, 1.0, 1.0 };
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
//glEnable(GL_LIGHTING);
//glEnable(GL_LIGHT0);
glDepthFunc(GL_LEQUAL);
glEnable(GL_DEPTH_TEST);
}