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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cvlights.cpp

?? Windows上的MUD客戶端程序
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*----------------------------------------------------------------------------
                        _                              _ _       
        /\             | |                            | (_)      
       /  \   _ __   __| |_ __ ___  _ __ ___   ___  __| |_  __ _ 
      / /\ \ | '_ \ / _` | '__/ _ \| '_ ` _ \ / _ \/ _` | |/ _` |
     / ____ \| | | | (_| | | | (_) | | | | | |  __/ (_| | | (_| |
    /_/    \_\_| |_|\__,_|_|  \___/|_| |_| |_|\___|\__,_|_|\__,_|

    The contents of this file are subject to the Andromedia Public
	License Version 1.0 (the "License"); you may not use this file
	except in compliance with the License. You may obtain a copy of
	the License at http://www.andromedia.com/APL/

    Software distributed under the License is distributed on an
	"AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
	implied. See the License for the specific language governing
	rights and limitations under the License.

    The Original Code is Pueblo client code, released November 4, 1998.

    The Initial Developer of the Original Code is Andromedia Incorporated.
	Portions created by Andromedia are Copyright (C) 1998 Andromedia
	Incorporated.  All Rights Reserved.

	Andromedia Incorporated                         415.365.6700
	818 Mission Street - 2nd Floor                  415.365.6701 fax
	San Francisco, CA 94103

    Contributor(s):
	--------------------------------------------------------------------------
	   Chaco team:  Dan Greening, Glenn Crocker, Jim Doubek,
	                Coyote Lussier, Pritham Shetty.

					Wrote and designed original codebase.

------------------------------------------------------------------------------

	Implementation for the ChQvLightInstance classes for  Intel 3DR.

----------------------------------------------------------------------------*/

// $Header: /home/cvs/chaco/modules/client/msw/ChGraphx/CvLights.cpp,v 2.17 1996/06/30 19:44:19 jimd Exp $

#include "grheader.h"

#include <QvInfo.h>
#include <QvState.h>
#include "ChMaze.h"
#include "ChMazDep.h"
#include "CvTrnsfm.h"
#include "CvNormal.h"
#include "CvConvrt.h"
#include "CvInstnc.h"
#include "CvType.h"
#include "ChRenderData.h"

//#define D3D_FLIP_LIGHTS		1

ChQvLightInstance::ChQvLightInstance()
{ }
ChQvInstance* ChQvLightInstance::Attach(QvNode *pNode, ChQvBuildState *pState)
{
	m_pNode = pNode;
	ChQvRenderBaseData *pRenderData =  (ChQvRenderBaseData *)(pNode->GetRenderData());

	// Hook us together
	pRenderData->Add(this);
	m_pRenderData = pRenderData;

	#if defined(CH_USE_OPENGL)
	// Open GL

	#elif defined(CH_USE_3DR)
	// Intel 3DR
		// We DO NOT add this to the instance tree, 
		// but we DO add it to the list of lights
	pState->GetView()->GetRenderContext()->Add(this);

	#elif (defined(CH_USE_RLAB) || defined(CH_USE_D3D))
	// Microsoft Reality Lab
		// We -DO- add this to the instance tree, 
		// but we DON'T add it to the list of lights

	ChQvGroupInstance *pParent =	pState->GetCurrentParent();
	if(pParent) pParent->Add(this);

	#endif

	Init(pState);
	#if (defined(CH_USE_RLAB) || defined(CH_USE_D3D))
	Build(GetContext());
	#endif

	return this;
}

#if (defined(CH_USE_RLAB) || defined(CH_USE_D3D))
void ChQvLightInstance::CreateFrame(GxVec3f &loc,  GxVec3f &dir )
{
	ChQvInstance::CreateFrame();		// Create one based on our qv transform
											// Now rotate z to lookdir
											// Translate, to put in right place in object coords
	//ChNrFrameAddTranslation(m_frame, CombineBefore, loc.x(), loc.y(), loc.z());
	ChNrFrameAddTranslation(m_frame, CombineBefore, loc.x(), loc.y(), loc.z());

	GxTransform3Wf transform;
	GxVec3f backDir = -dir;
	//transform.LookAt( backDir );
	#if D3D_FLIP_LIGHTS && (defined(CH_USE_D3D))
	dir = -dir;
	#endif
	GxVec3f normalizedDir(dir);
	normalizedDir.normalize();

	transform.LookAt( normalizedDir );
	ChNrFrameAddTransform(m_frame, CombineBefore, *transform.GetMatrix());
}
#endif


ChQvSpotLightInstance::ChQvSpotLightInstance()
{

}


#if defined(CH_USE_3DR)
bool ChQvSpotLightInstance::traverse(ChRenderContext *pContext)
{
	bool boolSuccess = false;

	int iLightNum = pContext->GetNextLight();	  
	G3dHandle_t hGC = pContext->GetGC();
  	QvSpotLight *pNode = (QvSpotLight *)m_pNode;

	if(iLightNum >= 0)
	{
		boolSuccess = true;
		Float_t		dimmer = 	int(pNode->on.value) ? 1. : 0.;
		float fIntensity = pNode->intensity.value;
		fIntensity = min(fIntensity, 1.);
		fIntensity = max(fIntensity, 0.);
		if(dimmer > 0. && fIntensity > 0.)
		{
			pContext->TurnOnALight();
			ColorF_t	diffuse;	Qv2Native(pNode->color, diffuse);
			ColorF_t	specular;	Qv2Native(pNode->color,specular) ;
			ColorF_t	ambient = {0.,0.,0.};
			// Transform light from model (vrml) to world coords for 3dr
			GxVec3f	dir, loc;

			Qv2Gx(pNode->location,loc);
			loc = Transform(loc);
			PointFW_t	loc3dr; 
			CopyPoint(loc, loc3dr);
			loc3dr.w = 1.;				 // noninfinite light
				
			Qv2Gx(pNode->direction, dir);
			dir = Transform(dir);
	 		PointF_t	dir3dr;
			CopyPoint(dir, dir3dr);

			Float_t		expon	=	Float_t(pNode->dropOffRate.value);
			Float_t		spotAngle	=	Float_t(pNode->cutOffAngle.value);
	
			specular.r *= fIntensity;
			specular.g *= fIntensity;
			specular.b *= fIntensity;

			diffuse.r *= fIntensity;
			diffuse.g *= fIntensity;
			diffuse.b *= fIntensity;

			G3dSetLight( hGC,  iLightNum, G3DL_DIMMER,    	(Float_t *)&dimmer     );			
			G3dSetLight( hGC,  iLightNum, G3DL_AMBIENT, 	(Float_t *)&ambient  );			
			G3dSetLight( hGC,  iLightNum, G3DL_DIFFUSE,  	(Float_t *)&diffuse   );			
			G3dSetLight( hGC,  iLightNum, G3DL_SPECULAR, 	(Float_t *)&specular  );			
			G3dSetLight( hGC,  iLightNum, G3DL_SPOT_EXP,     	(Float_t *)&expon      );			
			G3dSetLight( hGC,  iLightNum, G3DL_SPOT_ANGLE,  (Float_t *)&spotAngle     );

			G3dSetLight( hGC,  iLightNum, G3DL_DIRECTION,  (Float_t *)&dir3dr  );			
			G3dSetLight( hGC,  iLightNum, G3DL_LOCATION,  (Float_t *)&loc3dr  );
			//G3dSetLight( hGC,  iLightNum, G3DL_ATTENA,  (Float_t *)&atten  );
			//G3dSetLight( hGC,  iLightNum, G3DL_ATTENB,  (Float_t *)&atten  );
			//G3dSetLight( hGC,  iLightNum, G3DL_ATTENC,  (Float_t *)&atten  );
		}
	}
	return boolSuccess;
}
#elif (defined(CH_USE_RLAB) || defined(CH_USE_D3D))
void ChQvSpotLightInstance::Build(ChRenderContext *pRC)
{
  	QvSpotLight *pNode = (QvSpotLight *)m_pNode;
	float fIntensity = peg(pNode->intensity.value, float(0.), float(1.));
	if(pNode->on.value && fIntensity > 0.)
	{
		GxVec3f	dir(0,0,1), loc(0,0,0);

		Qv2Gx(pNode->location,loc);

		Qv2Gx(pNode->direction, dir);
		ChColor	color;	Qv2Native(pNode->color, color) ;

		color *= fIntensity;

		CreateFrame(loc, dir);
		float		spotAngle	=	float(pNode->cutOffAngle.value);
		m_light = pRC->CreateLight(ChNrLightSpot, *(color.GetNative()));
		ChNrFrameAddLight(m_frame, m_light);
		D3DRelease(m_light);
		float factor = .3;										// TODO fix to use exponent
		ChNrLightSetUmbra(m_light, spotAngle * factor);
		ChNrLightSetPenumbra(m_light, spotAngle);
	}
};
#endif



ChQvPointLightInstance::ChQvPointLightInstance()
{
}

#if defined(CH_USE_3DR)
bool ChQvPointLightInstance::traverse(ChRenderContext *pContext)
{
	bool boolSuccess = false;
	int iLightNum = pContext->GetNextLight();	  
	G3dHandle_t hGC = pContext->GetGC();
  	QvPointLight *pNode = (QvPointLight *)m_pNode;

	if(iLightNum >= 0)
	{
		boolSuccess = true;
		Float_t		dimmer = 	int(pNode->on.value) ? 1. : 0.;
		float fIntensity = pNode->intensity.value;
		fIntensity = min(fIntensity, 1.);
		fIntensity = max(fIntensity, 0.);
		if(dimmer > 0. && fIntensity > 0.)
		{
			pContext->TurnOnALight();
			ColorFA_t	diffuse;	Qv2Native(pNode->color, diffuse);
			ColorF_t	specular;	Qv2Native(pNode->color,specular) ;
	 		ColorF_t	ambient = {0.,0.,0.};

			// Transform light from model (vrml) to world coords for 3dr
			GxVec3f	dir(0, 0, 0);	  // not a spot
			GxVec3f loc;
	 		PointF_t	dir3dr;
			CopyPoint(dir, dir3dr);

			Qv2Gx(pNode->location,loc);
			loc = Transform(loc);
			PointFW_t	loc3dr; 
			CopyPoint(loc, loc3dr);
			loc3dr.w = 1.;				 // noninfinite light
		
			static Float_t attena = 1.0;
			static Float_t attenb = 0.0;
			static Float_t attenc = 0.0;

			specular.r *= fIntensity;
			specular.g *= fIntensity;
			specular.b *= fIntensity;

			diffuse.r *= fIntensity;
			diffuse.g *= fIntensity;
			diffuse.b *= fIntensity;


			G3dSetLight( hGC,  iLightNum, G3DL_DIMMER,    	(Float_t *)&dimmer     );			
			G3dSetLight( hGC,  iLightNum, G3DL_AMBIENT, 	(Float_t *)&ambient  );			
			G3dSetLight( hGC,  iLightNum, G3DL_DIFFUSE,  	(Float_t *)&diffuse   );			
			G3dSetLight( hGC,  iLightNum, G3DL_SPECULAR, 	(Float_t *)&specular  );			
			G3dSetLight( hGC,  iLightNum, G3DL_DIRECTION,  (Float_t *)&dir3dr  );			
			G3dSetLight( hGC,  iLightNum, G3DL_LOCATION,  (Float_t *)&loc3dr  );
			//G3dSetLight( hGC,  iLightNum, G3DL_ATTENA,  (Float_t *)&attena  );
			//G3dSetLight( hGC,  iLightNum, G3DL_ATTENB,  (Float_t *)&attenb  );
			//G3dSetLight( hGC,  iLightNum, G3DL_ATTENC,  (Float_t *)&attenc  );
		}
	}			
 	return boolSuccess;

}
#elif (defined(CH_USE_RLAB) || defined(CH_USE_D3D))
void ChQvPointLightInstance::Build(ChRenderContext *pRC)
{
  	QvPointLight *pNode = (QvPointLight *)m_pNode;
	float fIntensity = peg(pNode->intensity.value, float(0.), float(1.));
	if(pNode->on.value && fIntensity > 0.)
	{
		GxVec3f	dir(0,0,1), loc(0,0,0);

		Qv2Gx(pNode->location,loc);

		ChColor	color;	Qv2Native(pNode->color, color) ;

		color *= fIntensity;

		CreateFrame(loc, dir);
		m_light = pRC->CreateLight(ChNrLightPoint, *(color.GetNative()));
		#if defined(_DEBUG)
		ChNrValue cons = ChNrLightGetConstantAttenuation(m_light);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品视频一区二区三区| 九色综合国产一区二区三区| 日韩经典一区二区| 国产精品影音先锋| 正在播放亚洲一区| 亚洲男帅同性gay1069| 久久精品久久99精品久久| 日本乱人伦一区| 国产日韩欧美精品一区| 青青青伊人色综合久久| 欧美无人高清视频在线观看| 中文字幕亚洲一区二区va在线| 久久99国产乱子伦精品免费| 在线不卡免费欧美| 中文字幕字幕中文在线中不卡视频| 精品一区二区三区免费视频| 欧美男女性生活在线直播观看| 亚洲视频在线一区二区| 国产福利视频一区二区三区| 欧美一区二区日韩一区二区| 亚洲午夜在线视频| 在线视频一区二区三区| 亚洲图片你懂的| 99久久er热在这里只有精品66| 2023国产精品视频| 韩国三级中文字幕hd久久精品| 6080午夜不卡| 日精品一区二区三区| 69堂精品视频| 蜜臂av日日欢夜夜爽一区| 欧美一级黄色录像| 日本不卡一二三区黄网| 91麻豆精品国产91久久久| 亚洲 欧美综合在线网络| 精品视频在线免费看| 一区二区三区四区av| 色综合久久中文综合久久97| 亚洲美女淫视频| 欧美日韩中文国产| 视频在线观看91| 日韩欧美国产一区二区三区| 久久精品国产网站| 久久众筹精品私拍模特| 国产伦精品一区二区三区免费| 久久综合九色综合欧美亚洲| 岛国一区二区在线观看| 中文字幕一区二区三区在线观看| 不卡区在线中文字幕| 亚洲综合图片区| 这里是久久伊人| 国产成人精品一区二区三区网站观看| 国产精品视频免费看| 91麻豆6部合集magnet| 亚洲午夜视频在线| 日韩限制级电影在线观看| 国内外成人在线| 亚洲靠逼com| 欧美久久久久久久久久| 精品一区二区三区久久| 国产精品久久久爽爽爽麻豆色哟哟| aaa亚洲精品一二三区| 亚洲影视在线播放| 亚洲精品一区二区三区蜜桃下载| 成人网男人的天堂| 香蕉成人伊视频在线观看| 久久久国产精品麻豆| 91久久奴性调教| 久久er精品视频| 亚洲人妖av一区二区| 欧美一区二区大片| jlzzjlzz亚洲女人18| 日本大胆欧美人术艺术动态| 国产欧美日产一区| 欧美精品久久久久久久多人混战 | 激情成人午夜视频| 中文字幕欧美三区| 在线成人免费观看| 成人av在线一区二区三区| 三级一区在线视频先锋 | 91精品国产91热久久久做人人| 国产美女精品人人做人人爽 | 欧洲激情一区二区| 国产精品一区在线观看乱码| 性欧美疯狂xxxxbbbb| ...av二区三区久久精品| 精品欧美一区二区三区精品久久| 91美女视频网站| 国产精品一区二区在线观看网站| 亚洲国产精品久久不卡毛片 | 高清不卡在线观看| 蜜臀av性久久久久蜜臀av麻豆| 亚洲特级片在线| 国产三级三级三级精品8ⅰ区| 欧美三级中文字| 在线观看一区二区视频| 成人激情小说网站| 国产精品18久久久久久久久| 天天av天天翘天天综合网色鬼国产| 专区另类欧美日韩| 亚洲国产成人自拍| 国产日韩成人精品| 久久综合一区二区| 日韩欧美的一区二区| 欧美精品日韩一本| 欧美日韩不卡一区二区| 欧美做爰猛烈大尺度电影无法无天| 菠萝蜜视频在线观看一区| 成人午夜短视频| 成人白浆超碰人人人人| 国产精品一区二区在线观看不卡 | 日韩欧美一区电影| 欧美美女直播网站| 欧美日韩精品高清| 欧美精品久久一区| 欧美一级久久久久久久大片| 欧美日韩精品一区二区三区| 欧美日韩黄色影视| 欧美精品v日韩精品v韩国精品v| 欧美日韩久久久一区| 欧美日本在线播放| 欧美精品一二三| 精品美女被调教视频大全网站| 欧美一级日韩一级| 精品av久久707| 久久久久久久久久久久久久久99| 久久亚洲精品小早川怜子| 久久综合狠狠综合久久综合88 | 欧美日韩高清在线播放| 91麻豆精品国产| 日韩欧美久久一区| 精品国产污网站| 国产精品卡一卡二卡三| 亚洲欧美日韩久久精品| 亚洲影院理伦片| 久久99精品国产.久久久久| 成人综合婷婷国产精品久久| eeuss鲁一区二区三区| 欧美日韩一区二区三区在线看 | 欧美日韩在线免费视频| 6080国产精品一区二区| 久久综合给合久久狠狠狠97色69| 欧美国产乱子伦| 亚洲综合精品自拍| 久久精品国产亚洲a| 成人午夜私人影院| 欧美三级电影在线观看| 久久久久久久久蜜桃| 亚洲手机成人高清视频| 日本在线不卡视频一二三区| 国产成人免费视频一区| 色成人在线视频| 日韩欧美一区在线观看| 中文字幕视频一区| 日本伊人午夜精品| 99综合电影在线视频| 8v天堂国产在线一区二区| 欧美国产禁国产网站cc| 亚洲大尺度视频在线观看| 国产成人a级片| 在线不卡免费av| 亚洲精品中文字幕乱码三区| 久久se精品一区精品二区| 91久久精品网| 国产精品免费视频一区| 婷婷久久综合九色综合绿巨人| 国产成人免费视频网站高清观看视频| 欧美日韩在线亚洲一区蜜芽| 欧美国产一区二区在线观看| 日韩vs国产vs欧美| 欧洲色大大久久| 亚洲国产精品二十页| 久久se精品一区精品二区| 欧美视频一区二区三区在线观看| 国产亚洲一区二区三区| 日本美女一区二区| 欧美三级一区二区| 亚洲欧美偷拍三级| 大尺度一区二区| 精品成人免费观看| 日韩中文字幕亚洲一区二区va在线| a美女胸又www黄视频久久| 亚洲精品在线三区| 丝袜诱惑制服诱惑色一区在线观看 | 亚洲国产一区在线观看| av在线这里只有精品| 久久亚洲综合av| 精一区二区三区| 欧美一区二区三区视频免费播放 | 欧美日韩黄色一区二区| 亚洲九九爱视频| 91麻豆产精品久久久久久| 国产精品久久久久久久第一福利| 国产成人免费高清| 国产日韩亚洲欧美综合| 精品一二三四区| 久久亚洲免费视频| 国产不卡一区视频| 国产欧美一区二区精品性| 国产精品亚洲专一区二区三区 | 欧美一区二区播放|