⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 svisibility.cpp

📁 这是我做的一个VC++小程序
💻 CPP
字号:
/////////////////////////////////////////////////////////////////////////////////
//	
// SVisibility.cpp: implementation of the CSVisibility class.
//
////////////////////////////////////////////////////////////////////////////////
// 版权所有(2002)
// Copyright(2002)
// 编写者: 向世明
// Author: Xiang Shiming


#include "stdafx.h"
#include "SVisibility.h"

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

CSVisibility::CSVisibility()
{}

CSVisibility::~CSVisibility()
{}

//////////////////////////////////////////////////////////////////////////////////////////////
//
//					  小面可见性测试  
//
//////////////////////////////////////////////////////////////////////////////////////////////

//可见性测试
//顶点(v1, v2, v3)为左手坐标系下的点
BOOL CSVisibility::IsVisible(const VERTEX3D& v1, const VERTEX3D& v2, const VERTEX3D& v3)
{
	//采用平面公式法进行判别:
	float x = v1.x * (v2.y * v3.z - v3.y * v2.z);
	float y = v2.x * (v3.y * v1.z - v1.y * v3.z);
	float z = v3.x * (v1.y * v2.z - v2.y * v1.z);
	if((x + y + z) < 0.00001f) return FALSE;
	else return TRUE;
} 

BOOL CSVisibility::IsVisible(const HOMOCOORD& v1, const HOMOCOORD& v2, const HOMOCOORD& v3)
{
	//如果一个三角形中包含无穷远点, 则该三角形是一个畸形三角形, 因而我们规定它不可见
	if((ABS(v1.w) < 0.00001f) || (ABS(v2.w) < 0.00001f) 
		|| (ABS(v3.w) < 0.00001f)) return FALSE;
	float x1 = v1.x / v1.w,  y1 = v1.y / v1.w,  z1 = v1.z / v1.w;
	float x2 = v2.x / v2.w,  y2 = v2.y / v2.w,  z2 = v2.z / v2.w;
	float x3 = v3.x / v3.w,  y3 = v3.y / v3.w,  z3 = v3.z / v3.w;

	float x = x1 * (y2 * z3 - y3 * z2);
	float y = x2 * (y3 * z1 - y1 * z3);
	float z = x3 * (y1 * z2 - y2 * z1);

	if((x + y + z) < 0.00001f) return FALSE;
	return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -