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

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

?? gsphereimage.h

?? 一個非常有用的開源代碼
?? H
字號:
/*	Copyright (C) 2006, Mike Gashler	This library is free software; you can redistribute it and/or	modify it under the terms of the GNU Lesser General Public	License as published by the Free Software Foundation; either	version 2.1 of the License, or (at your option) any later version.	see http://www.gnu.org/copyleft/lesser.html*/#ifndef __GSPHEREIMAGE_H__#define __GSPHEREIMAGE_H__#include "GMacros.h"#include <math.h>#include "GBezier.h"#include "GImage.h"#include "GRayTrace.h"
class GSphereImagePixelEnumerator;class QImage;class GImage;class G3DObject;class GRayTraceVector;
// Represents a spherical image with pixels evenly distributed on the surface of the sphereclass GSphereImage{friend class GSphereImagePixelEnumerator;protected:	int m_nQuarterGirth;	double m_dHalfGirth;	double m_dRadius;	double m_dTheta;	int m_nWidth;	int m_nHeight;public:	GSphereImage(int nQuarterGirth); // nQuarterGirth is one fourth the circumference of the sphere	virtual ~GSphereImage();	// returns one fourth the circumference of the sphere		int GetQuarterGirth()	{		return m_nQuarterGirth;	}	// Returns the width of the flattened image that textures the sphere	int GetWidth()	{		return m_nWidth;	}	// Returns the height of the flattened image that textures the sphere	int GetHeight()	{		return m_nHeight;	}	// Returns the radius of the sphere	double GetRadius()	{		return m_dRadius;	}	// Returns the angle between ajacent pixels	double GetTheta()	{		return m_dTheta;	}	inline static void WrapRadians(double& yaw, double& pitch, bool* pbVertFlip)	{		if(pitch >= 3 * PI / 2)			pitch -= ((2 * PI) * (int)((pitch + PI / 2) / (2 * PI)));		if(pitch < -PI / 2)			pitch += ((2 * PI) * (int)((3 * PI / 2 - pitch) / (2 * PI)));		if(pitch > PI / 2)		{			pitch = PI - pitch;			yaw += PI;			*pbVertFlip = true;		}		else			*pbVertFlip = false;		if(yaw >= 3 * PI / 2)			yaw -= ((2 * PI) * (int)((yaw + PI / 2) / (2 * PI)));		if(yaw < -PI / 2)			yaw += ((2 * PI) * (int)((3 * PI / 2 - yaw) / (2 * PI)));	}	// This expects pitch to be between -PI/2 and PI/2 (inclusively), and yaw to be between -PI/2 to 3*PI/2 (inclusively)	void GetFlattenedCoords(double yaw, double pitch, double* pdX, double* pdY);	void SafeGetFlattenedCoords(double yaw, double pitch, double* pdX, double* pdY);	// This expects nX and nY to be somewhere on the flat image	void GetSphereCoords(int nX, int nY, double* pyaw, double* ppitch);protected:	inline void ToFlat(double yaw, double pitch, double* pdX, double* pdY)	{		*pdY = (pitch * m_dHalfGirth) / PI;		*pdX = (cos(pitch) * yaw * m_dHalfGirth) / PI;	}	inline void ToSphere(int nX, int nY, double* pyaw, double* ppitch)	{		*ppitch = (PI * (double)nY) / m_dHalfGirth;		*pyaw = (PI * (double)nX) / (cos(*ppitch) * m_dHalfGirth);	}};// This class iterates through the pixels in a GSphereImageclass GSphereImagePixelEnumerator{protected:	GSphereImage* m_pSphere;	int m_nX;	int m_nY;	int m_nFrontLeft;	int m_nFrontRight;	int m_nBackLeft;	int m_nBackRight;public:	GSphereImagePixelEnumerator(GSphereImage* pSphere)	{		m_pSphere = pSphere;		Reset();	}	void Reset()	{		m_nX = 0;		m_nY = 0;		RecalculateBounds();	}	bool GetNext(int* pnX, int* pnY);protected:	void RecalculateBounds();};class GPreRendered3DScreen : public GSphereImage{protected:	GImage* m_pImage;	float* m_pDepthMap;	struct Transform m_camera;	double m_dZoom;	bool m_bFlatScreen;public:	GPreRendered3DScreen(int nSize);	virtual ~GPreRendered3DScreen();	GImage* GetFlatImage()	{		return m_pImage;	}	float* GetDepthMap()	{		return m_pDepthMap;	}	// These values are expressed in radians and can be in any range	void SetCameraAngle(const struct Transform* pCamera, bool bFlatScreen);	// x, and y are relative to the center of the screen	void ScreenPixelToSphereCoords(int x, int y, double* pyaw, double* ppitch);	// x, and y are relative to the center of the screen	unsigned int GetPixel(int x, int y, float* pDepth);};class GPreRendered3DSprite : public GSphereImage{protected:	GImage* m_pImages;	float* m_pDepthMap;	int m_nArraySize;	int* m_pArray;	int m_nImageSize;public:	// Note: This will allocate a GImage, but it will not resize it.  It is your	//       job to call GetImages and resize the object it returns as appropriate	//       before you put pixels in it.  I realize that makes this a wierd class,	//       but it suits my purposes for now.	GPreRendered3DSprite(int nSize, int nImageSize);	virtual ~GPreRendered3DSprite();	GImage* GetImages()	{		return m_pImages;	}	float* GetDepthMap()	{		return m_pDepthMap;	}	int GetArraySize()	{		return m_nArraySize;	}	// Returns the width or height of a single image (they're always square)	int GetImageSize()	{		return m_nImageSize;	}	// Pass in coordinates on the flattened sphere image and this will return	// the horizontal offset where the corresponding frame begins in m_pImages.	int GetVertOffset(int nX, int nY)	{		int nIndex = nY * m_nWidth + nX;		GAssert(nIndex >= 0 && nIndex < m_nArraySize, "out of range");		return m_pArray[nIndex];	}	int GetVertOffset(double yaw, double pitch)	{		double nX, nY;		GetFlattenedCoords(yaw, pitch, &nX, &nY);		return GetVertOffset((int)nX, (int)nY);	}	int SafeGetVertOffset(double yaw, double pitch, bool* pbVertFlip)	{		WrapRadians(yaw, pitch, pbVertFlip);		double nX, nY;		GetFlattenedCoords(yaw, pitch, &nX, &nY);		return GetVertOffset((int)nX, (int)nY);	}};class GBoxScene{protected:	GImage m_image;	float* m_pDepthMap;public:	GBoxScene(int nWidth)	{		m_image.SetSize(nWidth, 6 * nWidth);		m_pDepthMap = new float[nWidth * 6 * nWidth];	}	~GBoxScene()	{		delete[] m_pDepthMap;	}	GImage* GetImage() { return &m_image; }	float* GetDepthMap() { return m_pDepthMap; }	void RayToPoint(float* pnOutX, float* pnOutY, GRayTraceVector* pRay)	{		int nFrame, u, v;		GRayTraceReal xx = pRay->m_vals[0] * pRay->m_vals[0];		GRayTraceReal yy = pRay->m_vals[1] * pRay->m_vals[1];		GRayTraceReal zz = pRay->m_vals[2] * pRay->m_vals[2];		if(xx >= yy && xx >= zz)		{			nFrame = 0;			u = 2;			v = 1;		}		else if(yy >= zz)		{			u = 2;			nFrame = 1;			v = 0;		}		else		{			u = 0;			v = 1;			nFrame = 2;		}		int halfWidth = m_image.GetWidth() / 2;		float t = (float)halfWidth / pRay->m_vals[nFrame];		*pnOutX = t * pRay->m_vals[u] + halfWidth;		*pnOutY = t * pRay->m_vals[v] + halfWidth;		if(pRay->m_vals[nFrame] < 0)			nFrame += 3;		(*pnOutY) += m_image.GetWidth() * nFrame;	}	// The ray this returns is NOT normalized	void PointToRay(GRayTraceVector* pRay, int x, int y)	{		int nFrame = y / m_image.GetWidth();		y = y % m_image.GetWidth();		if(nFrame >= 3)		{			nFrame -= 3;			pRay->m_vals[nFrame] = -1;			x = m_image.GetWidth() - x;			y = m_image.GetWidth() - y;		}		else			pRay->m_vals[nFrame] = 1;		int u = (nFrame == 2 ? 0 : 2);		int v = (nFrame == 1 ? 0 : 1);		pRay->m_vals[u] = (float)(x * 2) / m_image.GetWidth() - 1;		pRay->m_vals[v] = (float)(y * 2) / m_image.GetWidth() - 1;	}};#endif // __GSPHEREIMAGE_H__

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区毛片| 日韩欧美亚洲另类制服综合在线| 99久久国产综合色|国产精品| 制服丝袜亚洲精品中文字幕| 亚洲欧美视频一区| 国产乱国产乱300精品| 欧美日韩一区高清| 亚洲精品自拍动漫在线| 国内成+人亚洲+欧美+综合在线 | 亚洲一区二区三区影院| 国产成人午夜精品影院观看视频| 欧美日韩中文字幕一区| 亚洲女同一区二区| 不卡一区在线观看| 日本一区二区在线不卡| 激情综合色综合久久综合| 欧美丰满少妇xxxxx高潮对白| 亚洲免费观看高清完整版在线 | 精品sm捆绑视频| 日韩精品每日更新| 欧美日韩视频在线第一区 | 欧美激情中文不卡| 国产精品自拍三区| 久久色在线观看| 久久爱www久久做| 国产精品电影院| 久久精品国产澳门| 日韩欧美一级片| 秋霞影院一区二区| 日韩欧美一区在线| 麻豆国产精品777777在线| 欧美一区二视频| 久久99久久精品| 久久女同互慰一区二区三区| 精品一区二区日韩| 国产三级精品视频| 风间由美一区二区三区在线观看| 中文字幕国产一区| fc2成人免费人成在线观看播放| 国产欧美va欧美不卡在线| www.激情成人| 伊人性伊人情综合网| 欧美性xxxxxx少妇| 开心九九激情九九欧美日韩精美视频电影| 欧美日韩一二三区| 久久精品二区亚洲w码| 26uuu亚洲| av不卡免费在线观看| 一区二区三区精品在线观看| 欧美系列日韩一区| 六月丁香婷婷色狠狠久久| 国产欧美日韩三级| 91在线丨porny丨国产| 亚洲国产精品一区二区www在线| 欧美性大战xxxxx久久久| 蜜乳av一区二区| 欧美激情一区在线| 欧美亚洲免费在线一区| 全部av―极品视觉盛宴亚洲| 国产精品日产欧美久久久久| 色婷婷国产精品综合在线观看| 亚洲线精品一区二区三区| 精品国精品自拍自在线| 99v久久综合狠狠综合久久| 日韩国产欧美在线播放| 久久精品一区蜜桃臀影院| 欧洲亚洲精品在线| 国产一区二区三区日韩| 亚洲另类在线制服丝袜| 精品国产乱码久久| 色域天天综合网| 国产伦精品一区二区三区免费| 一区二区三区欧美激情| 精品国产一区二区亚洲人成毛片| 99热这里都是精品| 麻豆成人91精品二区三区| 亚洲卡通动漫在线| 久久日一线二线三线suv| 欧美网站一区二区| www.欧美日韩| 国产成人在线色| 欧美aaaaa成人免费观看视频| 国产精品乱码人人做人人爱| 91精品国产欧美一区二区18| 91网站最新地址| 国产伦精品一区二区三区在线观看| 亚洲成人动漫精品| 亚洲欧美国产高清| 国产精品理论片| 日韩免费看的电影| 欧美视频三区在线播放| 暴力调教一区二区三区| 国产在线看一区| 久久精品国产精品亚洲红杏| 亚洲一区二区在线视频| 亚洲蜜桃精久久久久久久| 欧美高清在线一区二区| 久久新电视剧免费观看| 欧美一区二区三区公司| 欧美日韩一区二区三区在线看| 97se亚洲国产综合自在线不卡| 国产99一区视频免费| 国产露脸91国语对白| 国产综合成人久久大片91| 免费欧美日韩国产三级电影| 视频一区二区欧美| 视频在线观看国产精品| 午夜精彩视频在线观看不卡| 亚洲精品成人悠悠色影视| 亚洲色图一区二区三区| 国产精品福利一区| 国产精品成人在线观看| 亚洲色图欧洲色图婷婷| 自拍偷在线精品自拍偷无码专区| 国产欧美日韩在线| 成人欧美一区二区三区黑人麻豆| 亚洲国产经典视频| 亚洲成人免费影院| 亚洲国产精品嫩草影院| 日韩精品每日更新| 日本不卡一二三区黄网| 黑人巨大精品欧美一区| 国产精品自拍毛片| 99国产一区二区三精品乱码| 91麻豆免费视频| 欧美日韩视频第一区| 在线电影国产精品| 精品欧美一区二区久久| 久久久亚洲精品石原莉奈| 国产精品久久久99| 亚洲综合在线第一页| 奇米色777欧美一区二区| 黄色精品一二区| av午夜一区麻豆| 欧美亚洲一区二区在线| 日韩精品中文字幕一区二区三区| 久久久精品人体av艺术| 亚洲激情图片小说视频| 香港成人在线视频| 久久精品国产澳门| 成人美女视频在线观看18| 色欧美88888久久久久久影院| 欧美男男青年gay1069videost| 日韩欧美久久一区| 国产精品久久久久久妇女6080| 亚洲国产精品久久人人爱| 国产综合色在线| 欧美三级视频在线| 久久久久久久久久久久电影| 亚洲精品自拍动漫在线| 久久成人综合网| 日本二三区不卡| 精品99999| 性久久久久久久久久久久| 国产盗摄视频一区二区三区| 一本大道av伊人久久综合| 精品福利一区二区三区免费视频| 成人欧美一区二区三区白人| 免费在线观看日韩欧美| 成人avav影音| 日韩视频一区二区在线观看| 国产精品毛片高清在线完整版 | 日韩码欧中文字| 日韩成人免费电影| eeuss鲁片一区二区三区在线观看| 欧美吻胸吃奶大尺度电影| 国产欧美日韩另类视频免费观看| 亚洲国产中文字幕在线视频综合 | 亚洲成av人片在www色猫咪| 国产一区在线看| 欧美日韩在线一区二区| 国产精品久久久久久妇女6080| 免费欧美日韩国产三级电影| 在线免费观看一区| 亚洲国产激情av| 黑人巨大精品欧美一区| 制服丝袜成人动漫| 亚洲一区二区在线免费看| 成人午夜免费av| 国产午夜精品一区二区三区四区| 天使萌一区二区三区免费观看| 色偷偷成人一区二区三区91| 国产精品你懂的在线| 国产乱码精品1区2区3区| 欧美xxxx老人做受| 久久精品国产亚洲a| 91精品一区二区三区久久久久久 | 欧美a级一区二区| 欧美伊人久久大香线蕉综合69| 国产精品福利一区二区三区| 国产激情一区二区三区四区| 精品欧美黑人一区二区三区| 久久se精品一区二区| 欧美乱熟臀69xxxxxx| 婷婷一区二区三区| 4438x亚洲最大成人网| 亚洲va国产天堂va久久en| 欧美日韩免费观看一区三区| 亚洲观看高清完整版在线观看 | 亚洲国产中文字幕|