亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? opengldc.cpp

?? 用vc編的stlview著重版
?? CPP
字號(hào):
// OpenGLDC.cpp: implementation of the COpenGLDC class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "OpenGLDC.h"

#define GL_PI 3.1415f

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

COpenGLDC::COpenGLDC(HWND hWnd):m_hWnd(hWnd)
{
	m_bSelectionMode = FALSE;
}

COpenGLDC::~COpenGLDC()
{
}

BOOL COpenGLDC::InitDC()
{
	if (m_hWnd == NULL) return FALSE;
	
	m_Camera.init();

	m_hDC = ::GetDC(m_hWnd);			// Get the Device context

	int pixelformat;
	PIXELFORMATDESCRIPTOR pfdWnd =
	{
		sizeof(PIXELFORMATDESCRIPTOR), // Structure size.
		1,                             // Structure version number.
		PFD_DRAW_TO_WINDOW |           // Property flags.
		PFD_SUPPORT_OPENGL |
 		PFD_DOUBLEBUFFER,
		PFD_TYPE_RGBA,
		24,                            // 24-bit color.
		0, 0, 0, 0, 0, 0,              // Not concerned with these.
		0, 0, 0, 0, 0, 0, 0,           // No alpha or accum buffer.
		32,                            // 32-bit depth buffer.
		0, 0,                          // No stencil or aux buffer.
		PFD_MAIN_PLANE,                // Main layer type.
		0,                             // Reserved.
		0, 0, 0                        // Unsupported.
	};

    if ( (pixelformat = ChoosePixelFormat(m_hDC, &pfdWnd)) == 0 )
	{
		AfxMessageBox("ChoosePixelFormat to wnd failed");
		return FALSE;
	}

    if (SetPixelFormat(m_hDC, pixelformat, &pfdWnd) == FALSE)
        AfxMessageBox("SetPixelFormat failed");

	m_hRC=wglCreateContext(m_hDC);

	VERIFY(wglMakeCurrent(m_hDC,m_hRC));
	GLSetupRC();
	wglMakeCurrent(NULL,NULL);
	return m_hRC!=0;
}


void COpenGLDC::GLResize(int w,int h)
{
	wglMakeCurrent(m_hDC,m_hRC);

	// Prevent a divide by zero
	if(h == 0) h = 1;
	if(w == 0) w = 1;
	m_Camera.set_screen(w,h);
}

void COpenGLDC::GLSetupRC()
{
	//initialize color and rendering
	m_bShading = TRUE;

	//bright white light - full intensity RGB values
	GLfloat lightAmbient[] = {0.75f,0.75f,0.75f,1.0f};
	GLfloat lightDiffuse[] = {1.0f,1.0f,1.0f,1.0f};

	glEnable(GL_DEPTH_TEST);		//Hidden surface removal
	glEnable(GL_CULL_FACE);			//Do not calculate inside of object
	glFrontFace(GL_CCW);			//counter clock-wise polygons face out

	glEnable(GL_LIGHTING);			//enable lighting

	//setup and enable light 0
	glLightfv(GL_LIGHT0,GL_AMBIENT,lightAmbient);
	glLightfv(GL_LIGHT0,GL_DIFFUSE,lightDiffuse);
	SetLightDirection(1,1,1);
	glEnable(GL_LIGHT0);

	//Initialize Material Color to Gray
	SetBkColor(RGB(0,0,0));				//black background
	SetMaterialColor(RGB(225,175,22));	//golden material color
	SetColor(RGB(255,255,255));			//white frame color
	SetHighlightColor(RGB(255,0,0));	//red highlight color	

	//Point Size
	glPointSize(3.0);
}


void COpenGLDC::Ready()
{
	wglMakeCurrent(m_hDC,m_hRC);
	ClearBkground();
	OnShading();
	m_Camera.projection();
}

void COpenGLDC::Finish()
{
	glFlush();
	SwapBuffers(m_hDC);
	wglMakeCurrent(m_hDC,NULL);
}


//////////////////LIGHT && MATERIALS SETTING//////////
void COpenGLDC::ClearBkground()
{
	GLclampf	r,g,b;
	r = (GLclampf)GetRValue(m_clrBk)/255.0;
	g = (GLclampf)GetGValue(m_clrBk)/255.0;
	b = (GLclampf)GetBValue(m_clrBk)/255.0;

	glClearColor(r,g,b,0.0f);
	glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
}

//setting model
void COpenGLDC::OnShading()
{
	if(m_bShading){
		glEnable( GL_LIGHTING );
	    glEnable(GL_LIGHT0);
		glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
	}
	else{
		glDisable( GL_LIGHTING );
		glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
	}
}

void COpenGLDC::Shading(BOOL bShading)
{
	m_bShading = bShading;
}

BOOL COpenGLDC::IsShading()
{
	return m_bShading;
}

void COpenGLDC::Lighting(BOOL bLighting)
{
	if(bLighting)
		glEnable( GL_LIGHTING );
	else
		glDisable( GL_LIGHTING );
}

BOOL COpenGLDC::IsLighting()
{
	GLboolean bLighting;
	glGetBooleanv(GL_LIGHTING,&bLighting);   
	return bLighting;
}

void COpenGLDC::SetLightDirection(float dx,float dy,float dz)
{
	m_vecLight[0] = dx;
	m_vecLight[1] = dy;
	m_vecLight[2] = dz;
	GLfloat lightPos[] = { dx, dy, dz, 0.0f };
	glLightfv(GL_LIGHT0,GL_POSITION,lightPos);
}

void COpenGLDC::GetLightDirection(float& dx,float& dy,float& dz)
{
	dx = m_vecLight[0];
	dy = m_vecLight[1];
	dz = m_vecLight[2];
}

//rendering color
void COpenGLDC::SetMaterialColor(COLORREF clr)
{
	m_clrMaterial = clr;
	BYTE r,g,b;
	r = GetRValue(clr);
	g = GetGValue(clr);
	b = GetBValue(clr);
	GLfloat mat_amb_diff[] = {(GLfloat)r/255,(GLfloat)g/255,(GLfloat)b/255,1.0};
	glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,mat_amb_diff);
}

void COpenGLDC::GetMaterialColor(COLORREF& clr)
{
	clr = m_clrMaterial;
}

void COpenGLDC::SetBkColor(COLORREF clr)
{
	m_clrBk = clr;
}

void COpenGLDC::GetBkColor(COLORREF& clr)
{
	clr = m_clrBk;
}

void COpenGLDC::SetColor(COLORREF clr)
{
	m_clr = clr;
	BYTE r,g,b;
	r = GetRValue(clr);
	g = GetGValue(clr);
	b = GetBValue(clr);
	glColor3ub(r,g,b);
}

void COpenGLDC::GetColor(COLORREF& clr)
{
	clr =  m_clr;
}

void COpenGLDC::SetHighlightColor(COLORREF clr)
{
	m_clrHighlight = clr;
}

void COpenGLDC::GetHighlightColor(COLORREF& clr)
{
	clr = m_clrHighlight;
}

void COpenGLDC::Highlight(BOOL bHighlight)
{
	BYTE r,g,b;
	if(bHighlight){
		r = GetRValue(m_clrHighlight);
		g = GetGValue(m_clrHighlight);
		b = GetBValue(m_clrHighlight);
	}
	else{
		r = GetRValue(m_clrMaterial);
		g = GetGValue(m_clrMaterial);
		b = GetBValue(m_clrMaterial);
	}
	GLfloat mat_amb_diff[] = {(GLfloat)r/255,(GLfloat)g/255,(GLfloat)b/255,1.0};
	glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,mat_amb_diff);
}


//////////////////////// drawing functions ////////////////////////
//draw point
void COpenGLDC::DrawPoint(const CPoint3D& pt)
{
	glBegin(GL_POINTS);
		glVertex3f(pt.x,pt.y,pt.z);
	glEnd();
}

void COpenGLDC::DrawLine(const CPoint3D& sp,const CPoint3D& ep)
{
	glBegin(GL_LINES);
		glVertex3f(sp.x,sp.y,sp.z);
		glVertex3f(ep.x,ep.y,ep.z);
	glEnd();
}

void COpenGLDC::DrawPolyline(const CPoint3D* pt,int size)
{
	glBegin(GL_LINE_STRIP);
	for(int i=0;i<size;i++)
		glVertex3f(pt[i].x,pt[i].y,pt[i].z);
	glEnd();
}

void COpenGLDC::DrawTriChip(double n0,double n1,double n2,double v00,double v01,double v02,
					double v10,double v11,double v12,double v20,double v21,double v22)
{
	glBegin(GL_TRIANGLES);
		glNormal3d(n0,n1,n2);
		glVertex3d(v00,v01,v02);
		glVertex3d(v10,v11,v12);
		glVertex3d(v20,v21,v22);
	glEnd();
}

//Draw 3D Solid
void COpenGLDC::DrawSphere(const CPoint3D& cen,double r,const CVector3D& vec)
{
	glPushMatrix();
	glTranslatef(cen.x,cen.y,cen.z);

	CVector3D vecNY(0,-1,0);
	CVector3D axis = vecNY*vec;
	double ang = _AngleBetween(vecNY,vec);
	ang = ang*180/GL_PI;
	glRotatef(ang,axis.dx,axis.dy,axis.dz);

	auxSolidSphere(r);
	glPopMatrix();
}

void COpenGLDC::DrawCylinder(const CPoint3D& cen,double r,const CVector3D& h)
{
	glPushMatrix();

	glTranslatef(cen.x,cen.y,cen.z);

	CVector3D vecNY(0,-1,0);
	CVector3D axis = vecNY*h;
	double ang = _AngleBetween(vecNY,h);
	ang = ang*180/GL_PI;
	glRotatef(ang,axis.dx,axis.dy,axis.dz);


	auxSolidCylinder(r,h.GetLength());
	glPopMatrix();
}

void COpenGLDC::DrawTorus(const CPoint3D& cen,const CVector3D& ax,double r_in,double r_out)
{
	glPushMatrix();

	glTranslatef(cen.x,cen.y,cen.z);

	CVector3D vecNY(0,-1,0);
	CVector3D axis = vecNY*ax;
	double ang = _AngleBetween(vecNY,ax);
	ang = ang*180/GL_PI;
	glRotatef(ang,axis.dx,axis.dy,axis.dz);


	auxSolidTorus(r_in,r_out);
	glPopMatrix();
}

void COpenGLDC::DrawCone(const CPoint3D& cen,double r,const CVector3D& h)
{
	glPushMatrix();

	glTranslatef(cen.x,cen.y,cen.z);

	CVector3D vecNY(0,-1,0);
	CVector3D axis = vecNY*h;
	double ang = _AngleBetween(vecNY,h);
	ang = ang*180/GL_PI;

	glRotatef(ang,axis.dx,axis.dy,axis.dz);

	GLfloat angle,x,y;
	glBegin(GL_TRIANGLE_FAN);
		glVertex3f(0,0,h.GetLength());
		for(angle =0.0f;angle<(2.0f*GL_PI);angle += (GL_PI/8.0f))
		{
			x = r*sin(angle);
			y = r*cos(angle);
			glVertex2f(x,y);
		}
	glEnd();

	// Begin a new triangle fan to cover the bottom
	glBegin(GL_TRIANGLE_FAN);
		glVertex2f(0.0f,0.0f);
		for(angle =0.0f;angle<(2.0f*GL_PI);angle += (GL_PI/8.0f))
		{
			x = r*sin(angle);
			y = r*cos(angle);
			glVertex2f(x,y);
		}
	glEnd();
	glPopMatrix();
}

////////////////////////////////////////

void COpenGLDC::DrawCoord()
{

	BOOL bLighting = IsLighting();
	Lighting(FALSE);

	double width,height;
	m_Camera.get_view_rect(width,height);
	double len = min(width,height);
	len *= 0.2;

	CPoint3D cPt,xPt,yPt,zPt;
	xPt.x = yPt.y = zPt.z = len;

	COLORREF old_clr;
	GetColor(old_clr);

	//axis-x: red
	SetColor(RGB(255,0,0));
	DrawLine(cPt,xPt);

	//axis-y: green
	SetColor(RGB(0,255,0));
	DrawLine(cPt,yPt);

	//axis-z: blue
	SetColor(RGB(0,0,255));
	DrawLine(cPt,zPt);

	Lighting(bLighting);
	SetColor(old_clr);
}

//////////////////////////////////////////////////
void COpenGLDC::BeginSelection(int xPos,int yPos)
{
	m_bSelectionMode = TRUE;
	wglMakeCurrent(m_hDC,m_hRC);
	
	GLint	viewport[4];
	
	//set up selection buffer	
	glSelectBuffer(BUFFER_LENGTH,m_selectBuff);
	
	//switch to projection and save the matrix
	m_Camera.selection(xPos,yPos);

	glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
	InitNames();
}

int	COpenGLDC::EndSelection(UINT* items)
{
	m_bSelectionMode = FALSE;
	int hits = glRenderMode(GL_RENDER);
	for(int i=0;i<hits;i++){
		items[i] = m_selectBuff[i*4+3];
	}
	wglMakeCurrent(m_hDC,NULL);
	return hits;
}

BOOL COpenGLDC::IsSelectionMode()
{
	return m_bSelectionMode;
}

void COpenGLDC::InitNames()
{
	glInitNames();
	glPushName(0);
}

void COpenGLDC::LoadName(UINT name)
{
	glLoadName(name);
}

void COpenGLDC::PushName(UINT name)
{
	glPushName(name);
}

void COpenGLDC::PopName()
{
	glPopName();
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美亚洲一区二区三区四区| 亚洲精品国产一区二区三区四区在线| 欧美美女一区二区| 一本一道波多野结衣一区二区| 不卡一区中文字幕| 成人黄色一级视频| 91在线丨porny丨国产| 91视频免费看| 精品视频免费看| 欧美一区二区三区免费观看视频 | 成人免费视频一区| 成人一区在线观看| 99久久99久久精品国产片果冻| 99精品视频在线免费观看| 色伊人久久综合中文字幕| 欧美日韩一级黄| 欧美一级理论性理论a| 亚洲精品在线观| 日本一二三四高清不卡| 亚洲欧美日韩综合aⅴ视频| 亚洲尤物在线视频观看| 免播放器亚洲一区| 国产精品一区二区果冻传媒| av色综合久久天堂av综合| 在线免费观看日韩欧美| 欧美理论在线播放| 精品国产亚洲一区二区三区在线观看 | 欧美日韩国产免费| 日韩西西人体444www| 国产日产欧美一区| 一区二区三区四区不卡在线| 成人中文字幕电影| 色婷婷综合五月| 欧美一区二区成人| 久久精品日产第一区二区三区高清版 | 亚洲国产精品黑人久久久| 中文字幕一区二区三区乱码在线| 亚洲高清三级视频| 国模娜娜一区二区三区| 91丨九色丨尤物| 7777精品伊人久久久大香线蕉的 | 综合久久久久久| 秋霞午夜鲁丝一区二区老狼| 成人av第一页| 欧美精品视频www在线观看| 久久久www成人免费毛片麻豆 | 亚洲成人手机在线| 国产在线精品一区二区不卡了| 99综合电影在线视频| 91精品国产91综合久久蜜臀| 国产精品你懂的在线| 亚洲国产精品久久不卡毛片| 国产精品综合在线视频| 欧美色爱综合网| 日本一区二区在线不卡| 亚洲成人福利片| 成人久久久精品乱码一区二区三区| 欧美性色欧美a在线播放| 精品裸体舞一区二区三区| 亚洲一线二线三线久久久| 国产一区二区福利视频| 欧美日韩dvd在线观看| 国产精品护士白丝一区av| 热久久久久久久| 91免费观看在线| 久久久亚洲综合| 蜜桃免费网站一区二区三区| 91麻豆福利精品推荐| 亚洲综合在线免费观看| 成a人片亚洲日本久久| 26uuu亚洲综合色欧美| 亚洲成人综合网站| 91丨porny丨国产入口| 国产欧美精品区一区二区三区| 日本欧美一区二区三区| 一本高清dvd不卡在线观看| 国产日韩欧美高清| 国产在线国偷精品产拍免费yy| 9191成人精品久久| 亚洲动漫第一页| 91黄色免费版| 亚洲男人天堂av| 99天天综合性| 国产精品人人做人人爽人人添| 国产麻豆视频一区二区| 精品va天堂亚洲国产| 日韩va亚洲va欧美va久久| 欧美日韩日本视频| 亚洲成a人片综合在线| 欧美三级午夜理伦三级中视频| 尤物视频一区二区| 日本道色综合久久| 亚洲一区国产视频| 欧美性三三影院| 亚洲主播在线播放| 欧美亚洲一区二区在线观看| 亚洲女女做受ⅹxx高潮| 91在线porny国产在线看| 中文字幕佐山爱一区二区免费| 成人av免费在线| 亚洲欧美自拍偷拍| 99久久99久久精品免费观看| 亚洲女人的天堂| 国产精品理论片| 99久久99久久精品免费看蜜桃| 亚洲同性同志一二三专区| 99久久婷婷国产| 亚洲精品成a人| 欧美日本不卡视频| 日韩国产一区二| 精品国产亚洲在线| 国产精品影视网| 国产精品色婷婷| 色综合天天综合网天天看片| 亚洲精品国产精品乱码不99 | 中文字幕一区三区| 91网站最新地址| 亚洲成人高清在线| 日韩一区二区三区观看| 韩国欧美国产1区| 国产香蕉久久精品综合网| 成人av在线影院| 一区二区三区四区五区视频在线观看| 91成人看片片| 久久精品国产一区二区三区免费看 | 精品国产99国产精品| 国产精品一区二区无线| 成人免费在线播放视频| 欧美性做爰猛烈叫床潮| 麻豆精品视频在线| 国产精品久久影院| 欧美日韩一二三| 国产一区二区三区免费观看| 国产精品理论在线观看| 欧美人妇做爰xxxⅹ性高电影| 午夜精品福利在线| 久久这里只有精品首页| 一本色道久久综合精品竹菊| 日本午夜精品一区二区三区电影 | 久久se这里有精品| 中文字幕一区视频| 91精品国产一区二区三区香蕉| 国内精品伊人久久久久av影院 | 日韩精品电影一区亚洲| 久久精品一区二区三区四区| 欧美这里有精品| 国产美女精品一区二区三区| 一区二区三区欧美在线观看| 欧美成人精品高清在线播放| 99国产欧美另类久久久精品| 免费在线观看一区| 亚洲色图欧美激情| 欧美成人在线直播| 日本丶国产丶欧美色综合| 国产一区二区三区在线观看免费 | 在线亚洲一区观看| 精品一区二区在线免费观看| 一级女性全黄久久生活片免费| 欧美大片日本大片免费观看| 色av成人天堂桃色av| 国产大陆亚洲精品国产| 天天av天天翘天天综合网| 国产精品国产三级国产普通话蜜臀| 在线不卡a资源高清| 波多野结衣视频一区| 精品一区二区国语对白| 亚洲午夜视频在线| 国产精品色眯眯| 久久亚洲欧美国产精品乐播| 欧美高清视频一二三区| 91麻豆免费视频| 国产精品996| 久久99精品网久久| 亚洲va天堂va国产va久| 最新不卡av在线| 国产喷白浆一区二区三区| 日韩一区二区不卡| 91麻豆国产自产在线观看| 国产成人免费视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 一区二区久久久久久| 亚洲欧洲日产国码二区| 2020日本不卡一区二区视频| 4hu四虎永久在线影院成人| 欧洲日韩一区二区三区| 不卡的av电影| 成人精品一区二区三区中文字幕| 国产一区二区精品在线观看| 日韩一区精品字幕| 亚洲第一在线综合网站| 亚洲综合激情小说| 亚洲猫色日本管| 综合激情成人伊人| 亚洲欧美在线另类| 中文av一区特黄| 国产精品毛片久久久久久| 欧美精品一区二区久久久| 3d成人h动漫网站入口| 51久久夜色精品国产麻豆| 91超碰这里只有精品国产|