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

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

?? r_aclip.c

?? 著名游戲quake2原代碼最新版本(vc6.0可以編譯的)
?? C
字號:
/*
Copyright (C) 1997-2001 Id Software, Inc.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  

See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

*/
// r_aclip.c: clip routines for drawing Alias models directly to the screen

#include "r_local.h"

static finalvert_t		fv[2][8];

void R_AliasProjectAndClipTestFinalVert (finalvert_t *fv);
void R_Alias_clip_top (finalvert_t *pfv0, finalvert_t *pfv1,
	finalvert_t *out);
void R_Alias_clip_bottom (finalvert_t *pfv0, finalvert_t *pfv1,
	finalvert_t *out);
void R_Alias_clip_left (finalvert_t *pfv0, finalvert_t *pfv1,
	finalvert_t *out);
void R_Alias_clip_right (finalvert_t *pfv0, finalvert_t *pfv1,
	finalvert_t *out);


/*
================
R_Alias_clip_z

pfv0 is the unclipped vertex, pfv1 is the z-clipped vertex
================
*/
void R_Alias_clip_z (finalvert_t *pfv0, finalvert_t *pfv1, finalvert_t *out)
{
	float		scale;

	scale = (ALIAS_Z_CLIP_PLANE - pfv0->xyz[2]) /
			(pfv1->xyz[2] - pfv0->xyz[2]);

	out->xyz[0] = pfv0->xyz[0] + (pfv1->xyz[0] - pfv0->xyz[0]) * scale;
	out->xyz[1] = pfv0->xyz[1] + (pfv1->xyz[1] - pfv0->xyz[1]) * scale;
	out->xyz[2] = ALIAS_Z_CLIP_PLANE;

	out->s =	pfv0->s + (pfv1->s - pfv0->s) * scale;
	out->t =	pfv0->t + (pfv1->t - pfv0->t) * scale;
	out->l =	pfv0->l + (pfv1->l - pfv0->l) * scale;

	R_AliasProjectAndClipTestFinalVert (out);
}


#if	!id386

void R_Alias_clip_left (finalvert_t *pfv0, finalvert_t *pfv1, finalvert_t *out)
{
	float		scale;

	if (pfv0->v >= pfv1->v )
	{
		scale = (float)(r_refdef.aliasvrect.x - pfv0->u) /
				(pfv1->u - pfv0->u);
		out->u  = pfv0->u  + ( pfv1->u  - pfv0->u ) * scale + 0.5;
		out->v  = pfv0->v  + ( pfv1->v  - pfv0->v ) * scale + 0.5;
		out->s  = pfv0->s  + ( pfv1->s  - pfv0->s ) * scale + 0.5;
		out->t  = pfv0->t  + ( pfv1->t  - pfv0->t ) * scale + 0.5;
		out->l  = pfv0->l  + ( pfv1->l  - pfv0->l ) * scale + 0.5;
		out->zi = pfv0->zi + ( pfv1->zi - pfv0->zi) * scale + 0.5;
	}
	else
	{
		scale = (float)(r_refdef.aliasvrect.x - pfv1->u) /
				(pfv0->u - pfv1->u);
		out->u  = pfv1->u  + ( pfv0->u  - pfv1->u ) * scale + 0.5;
		out->v  = pfv1->v  + ( pfv0->v  - pfv1->v ) * scale + 0.5;
		out->s  = pfv1->s  + ( pfv0->s  - pfv1->s ) * scale + 0.5;
		out->t  = pfv1->t  + ( pfv0->t  - pfv1->t ) * scale + 0.5;
		out->l  = pfv1->l  + ( pfv0->l  - pfv1->l ) * scale + 0.5;
		out->zi = pfv1->zi + ( pfv0->zi - pfv1->zi) * scale + 0.5;
	}
}


void R_Alias_clip_right (finalvert_t *pfv0, finalvert_t *pfv1, finalvert_t *out)
{
	float		scale;

	if ( pfv0->v >= pfv1->v )
	{
		scale = (float)(r_refdef.aliasvrectright - pfv0->u ) /
				(pfv1->u - pfv0->u );
		out->u  = pfv0->u  + ( pfv1->u  - pfv0->u ) * scale + 0.5;
		out->v  = pfv0->v  + ( pfv1->v  - pfv0->v ) * scale + 0.5;
		out->s  = pfv0->s  + ( pfv1->s  - pfv0->s ) * scale + 0.5;
		out->t  = pfv0->t  + ( pfv1->t  - pfv0->t ) * scale + 0.5;
		out->l  = pfv0->l  + ( pfv1->l  - pfv0->l ) * scale + 0.5;
		out->zi = pfv0->zi + ( pfv1->zi - pfv0->zi) * scale + 0.5;
	}
	else
	{
		scale = (float)(r_refdef.aliasvrectright - pfv1->u ) /
				(pfv0->u - pfv1->u );
		out->u  = pfv1->u  + ( pfv0->u  - pfv1->u ) * scale + 0.5;
		out->v  = pfv1->v  + ( pfv0->v  - pfv1->v ) * scale + 0.5;
		out->s  = pfv1->s  + ( pfv0->s  - pfv1->s ) * scale + 0.5;
		out->t  = pfv1->t  + ( pfv0->t  - pfv1->t ) * scale + 0.5;
		out->l  = pfv1->l  + ( pfv0->l  - pfv1->l ) * scale + 0.5;
		out->zi = pfv1->zi + ( pfv0->zi - pfv1->zi) * scale + 0.5;
	}
}


void R_Alias_clip_top (finalvert_t *pfv0, finalvert_t *pfv1, finalvert_t *out)
{
	float		scale;

	if (pfv0->v >= pfv1->v)
	{
		scale = (float)(r_refdef.aliasvrect.y - pfv0->v) /
				(pfv1->v - pfv0->v);
		out->u  = pfv0->u  + ( pfv1->u  - pfv0->u ) * scale + 0.5;
		out->v  = pfv0->v  + ( pfv1->v  - pfv0->v ) * scale + 0.5;
		out->s  = pfv0->s  + ( pfv1->s  - pfv0->s ) * scale + 0.5;
		out->t  = pfv0->t  + ( pfv1->t  - pfv0->t ) * scale + 0.5;
		out->l  = pfv0->l  + ( pfv1->l  - pfv0->l ) * scale + 0.5;
		out->zi = pfv0->zi + ( pfv1->zi - pfv0->zi) * scale + 0.5;
	}
	else
	{
		scale = (float)(r_refdef.aliasvrect.y - pfv1->v) /
				(pfv0->v - pfv1->v);
		out->u  = pfv1->u  + ( pfv0->u  - pfv1->u ) * scale + 0.5;
		out->v  = pfv1->v  + ( pfv0->v  - pfv1->v ) * scale + 0.5;
		out->s  = pfv1->s  + ( pfv0->s  - pfv1->s ) * scale + 0.5;
		out->t  = pfv1->t  + ( pfv0->t  - pfv1->t ) * scale + 0.5;
		out->l  = pfv1->l  + ( pfv0->l  - pfv1->l ) * scale + 0.5;
		out->zi = pfv1->zi + ( pfv0->zi - pfv1->zi) * scale + 0.5;
	}
}


void R_Alias_clip_bottom (finalvert_t *pfv0, finalvert_t *pfv1,
	finalvert_t *out)
{
	float		scale;

	if (pfv0->v >= pfv1->v)
	{
		scale = (float)(r_refdef.aliasvrectbottom - pfv0->v) /
				(pfv1->v - pfv0->v);

		out->u  = pfv0->u  + ( pfv1->u  - pfv0->u ) * scale + 0.5;
		out->v  = pfv0->v  + ( pfv1->v  - pfv0->v ) * scale + 0.5;
		out->s  = pfv0->s  + ( pfv1->s  - pfv0->s ) * scale + 0.5;
		out->t  = pfv0->t  + ( pfv1->t  - pfv0->t ) * scale + 0.5;
		out->l  = pfv0->l  + ( pfv1->l  - pfv0->l ) * scale + 0.5;
		out->zi = pfv0->zi + ( pfv1->zi - pfv0->zi) * scale + 0.5;
	}
	else
	{
		scale = (float)(r_refdef.aliasvrectbottom - pfv1->v) /
				(pfv0->v - pfv1->v);

		out->u  = pfv1->u  + ( pfv0->u  - pfv1->u ) * scale + 0.5;
		out->v  = pfv1->v  + ( pfv0->v  - pfv1->v ) * scale + 0.5;
		out->s  = pfv1->s  + ( pfv0->s  - pfv1->s ) * scale + 0.5;
		out->t  = pfv1->t  + ( pfv0->t  - pfv1->t ) * scale + 0.5;
		out->l  = pfv1->l  + ( pfv0->l  - pfv1->l ) * scale + 0.5;
		out->zi = pfv1->zi + ( pfv0->zi - pfv1->zi) * scale + 0.5;
	}
}

#endif


int R_AliasClip (finalvert_t *in, finalvert_t *out, int flag, int count,
	void(*clip)(finalvert_t *pfv0, finalvert_t *pfv1, finalvert_t *out) )
{
	int			i,j,k;
	int			flags, oldflags;
	
	j = count-1;
	k = 0;
	for (i=0 ; i<count ; j = i, i++)
	{
		oldflags = in[j].flags & flag;
		flags = in[i].flags & flag;

		if (flags && oldflags)
			continue;
		if (oldflags ^ flags)
		{
			clip (&in[j], &in[i], &out[k]);
			out[k].flags = 0;
			if (out[k].u < r_refdef.aliasvrect.x)
				out[k].flags |= ALIAS_LEFT_CLIP;
			if (out[k].v < r_refdef.aliasvrect.y)
				out[k].flags |= ALIAS_TOP_CLIP;
			if (out[k].u > r_refdef.aliasvrectright)
				out[k].flags |= ALIAS_RIGHT_CLIP;
			if (out[k].v > r_refdef.aliasvrectbottom)
				out[k].flags |= ALIAS_BOTTOM_CLIP;	
			k++;
		}
		if (!flags)
		{
			out[k] = in[i];
			k++;
		}
	}
	
	return k;
}


/*
================
R_AliasClipTriangle
================
*/
void R_AliasClipTriangle (finalvert_t *index0, finalvert_t *index1, finalvert_t *index2)
{
	int				i, k, pingpong;
	unsigned		clipflags;

// copy vertexes and fix seam texture coordinates
	fv[0][0] = *index0;
	fv[0][1] = *index1;
	fv[0][2] = *index2;

// clip
	clipflags = fv[0][0].flags | fv[0][1].flags | fv[0][2].flags;

	if (clipflags & ALIAS_Z_CLIP)
	{
		k = R_AliasClip (fv[0], fv[1], ALIAS_Z_CLIP, 3, R_Alias_clip_z);
		if (k == 0)
			return;

		pingpong = 1;
		clipflags = fv[1][0].flags | fv[1][1].flags | fv[1][2].flags;
	}
	else
	{
		pingpong = 0;
		k = 3;
	}

	if (clipflags & ALIAS_LEFT_CLIP)
	{
		k = R_AliasClip (fv[pingpong], fv[pingpong ^ 1],
							ALIAS_LEFT_CLIP, k, R_Alias_clip_left);
		if (k == 0)
			return;

		pingpong ^= 1;
	}

	if (clipflags & ALIAS_RIGHT_CLIP)
	{
		k = R_AliasClip (fv[pingpong], fv[pingpong ^ 1],
							ALIAS_RIGHT_CLIP, k, R_Alias_clip_right);
		if (k == 0)
			return;

		pingpong ^= 1;
	}

	if (clipflags & ALIAS_BOTTOM_CLIP)
	{
		k = R_AliasClip (fv[pingpong], fv[pingpong ^ 1],
							ALIAS_BOTTOM_CLIP, k, R_Alias_clip_bottom);
		if (k == 0)
			return;

		pingpong ^= 1;
	}

	if (clipflags & ALIAS_TOP_CLIP)
	{
		k = R_AliasClip (fv[pingpong], fv[pingpong ^ 1],
							ALIAS_TOP_CLIP, k, R_Alias_clip_top);
		if (k == 0)
			return;

		pingpong ^= 1;
	}

	for (i=0 ; i<k ; i++)
	{
		if (fv[pingpong][i].u < r_refdef.aliasvrect.x)
			fv[pingpong][i].u = r_refdef.aliasvrect.x;
		else if (fv[pingpong][i].u > r_refdef.aliasvrectright)
			fv[pingpong][i].u = r_refdef.aliasvrectright;

		if (fv[pingpong][i].v < r_refdef.aliasvrect.y)
			fv[pingpong][i].v = r_refdef.aliasvrect.y;
		else if (fv[pingpong][i].v > r_refdef.aliasvrectbottom)
			fv[pingpong][i].v = r_refdef.aliasvrectbottom;

		fv[pingpong][i].flags = 0;
	}

// draw triangles
	for (i=1 ; i<k-1 ; i++)
	{
		aliastriangleparms.a = &fv[pingpong][0];
		aliastriangleparms.b = &fv[pingpong][i];
		aliastriangleparms.c = &fv[pingpong][i+1];
		R_DrawTriangle();
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀av在线播放一区二区三区| 黄网站免费久久| 精品国产第一区二区三区观看体验| 成人妖精视频yjsp地址| 视频在线观看国产精品| 亚洲视频综合在线| 国产亚洲女人久久久久毛片| 欧美日韩视频在线第一区| 成人免费视频网站在线观看| 看电影不卡的网站| 亚洲成人av在线电影| 亚洲国产精品成人综合色在线婷婷 | 欧美乱妇15p| 粉嫩av亚洲一区二区图片| 天天操天天色综合| 亚洲丝袜另类动漫二区| 国产网站一区二区三区| 91精品一区二区三区在线观看| 91日韩一区二区三区| 国产一区二区三区四| 视频一区视频二区中文字幕| 亚洲免费观看高清完整版在线观看 | 99国产精品国产精品久久| 韩国成人精品a∨在线观看| 日韩精品乱码av一区二区| 亚洲乱码中文字幕综合| 国产欧美一区二区精品婷婷| 911精品产国品一二三产区| 欧洲一区在线电影| 色哟哟国产精品| 91免费国产视频网站| 成人毛片视频在线观看| 国产福利91精品| 国产乱一区二区| 国产精品亚洲一区二区三区妖精 | 三级影片在线观看欧美日韩一区二区 | 91麻豆精品91久久久久久清纯| 欧美在线观看一二区| 欧美亚洲丝袜传媒另类| 欧美视频三区在线播放| 欧美日韩国产色站一区二区三区| 欧美吻胸吃奶大尺度电影 | 久久综合久色欧美综合狠狠| 精品蜜桃在线看| 欧美tk—视频vk| 精品成人一区二区| 欧美激情综合五月色丁香| 亚洲国产精品成人久久综合一区 | 中文字幕在线观看不卡视频| 国产精品美女久久久久aⅴ国产馆| 国产三级精品视频| 国产精品久久精品日日| 亚洲欧美色一区| 亚洲成人av资源| 久久99最新地址| 国产高清在线观看免费不卡| av在线一区二区三区| 欧洲日韩一区二区三区| 欧美肥胖老妇做爰| 久久久不卡网国产精品一区| 国产精品久久久久一区| 亚洲愉拍自拍另类高清精品| 三级精品在线观看| 国产精品一区二区久久精品爱涩| 成人深夜福利app| 欧美性大战xxxxx久久久| 欧美一区二区三区四区五区| 国产欧美精品区一区二区三区| 亚洲人精品午夜| 日韩福利电影在线| 国产99久久久精品| 在线免费av一区| 欧美videossexotv100| 中文字幕一区二区三区视频| 天天射综合影视| 成人av资源在线| 欧美日韩三级在线| 国产亚洲美州欧州综合国| 亚洲综合久久久久| 国产美女精品人人做人人爽| 色婷婷久久久亚洲一区二区三区 | 久久久国产精品午夜一区ai换脸| 亚洲激情网站免费观看| 精品中文字幕一区二区| 一本久道中文字幕精品亚洲嫩| 欧美一级免费大片| 亚洲视频一区二区在线| 久久99国产精品尤物| 91精品1区2区| 国产区在线观看成人精品| 亚洲国产综合91精品麻豆| 国产成人午夜99999| 91精品国产综合久久蜜臀| 国产精品久久看| 免费精品99久久国产综合精品| 成人av电影在线| 亚洲精品一区二区三区在线观看 | 91麻豆精品国产91久久久更新时间| 久久久久久久国产精品影院| 亚洲va欧美va国产va天堂影院| 成人av影视在线观看| 日韩欧美中文字幕公布| 一区二区在线免费| 大尺度一区二区| 精品1区2区在线观看| 视频一区视频二区中文字幕| 91欧美一区二区| 中文字幕不卡在线播放| 国内久久精品视频| 91精品国产91久久综合桃花 | 日韩av电影免费观看高清完整版 | 午夜精品久久久久久久99水蜜桃| 丁香婷婷综合网| 久久综合99re88久久爱| 蜜桃久久精品一区二区| 欧美男女性生活在线直播观看| 亚洲欧美激情一区二区| voyeur盗摄精品| 中文字幕巨乱亚洲| 国产999精品久久久久久绿帽| 精品国产精品网麻豆系列| 免费在线看一区| 91精品蜜臀在线一区尤物| 午夜欧美一区二区三区在线播放| 色哟哟一区二区在线观看| 亚洲欧美综合色| 91麻豆国产精品久久| 亚洲三级久久久| 91蝌蚪porny成人天涯| 亚洲欧洲在线观看av| 91啪亚洲精品| 一区二区三区 在线观看视频| 91国偷自产一区二区三区观看| 亚洲免费资源在线播放| 欧美在线观看你懂的| 亚洲成年人网站在线观看| 欧美日韩在线播放三区四区| 亚洲mv大片欧洲mv大片精品| 911精品产国品一二三产区| 婷婷一区二区三区| 日韩欧美国产午夜精品| 久久91精品久久久久久秒播| 久久影音资源网| 国产乱人伦精品一区二区在线观看 | 欧美精品粉嫩高潮一区二区| 日本欧美一区二区在线观看| 日韩午夜小视频| 国产乱国产乱300精品| 欧美国产日韩在线观看| 99riav一区二区三区| 亚洲国产成人91porn| 6080日韩午夜伦伦午夜伦| 老司机午夜精品99久久| 国产视频在线观看一区二区三区| av电影在线观看完整版一区二区| 亚洲日本青草视频在线怡红院 | 欧美日韩一二区| 另类小说综合欧美亚洲| 久久久久成人黄色影片| 91日韩在线专区| 日本一不卡视频| 欧美高清在线一区二区| 色综合久久久久| 蜜臀av国产精品久久久久| 欧美国产乱子伦| 99re成人精品视频| 日本sm残虐另类| 国产精品理论在线观看| 欧美日韩免费视频| 国产麻豆一精品一av一免费 | 91免费版pro下载短视频| 亚洲一区二区三区视频在线| 日韩欧美激情在线| av电影在线不卡| 日韩精品一区第一页| 国产女人18毛片水真多成人如厕| 91日韩在线专区| 激情久久五月天| 亚洲国产日产av| 精品福利二区三区| 在线精品国精品国产尤物884a| 另类成人小视频在线| 亚洲精品国产成人久久av盗摄 | 精品一区二区三区在线播放| 中文字幕亚洲成人| 欧美成人乱码一区二区三区| 色综合久久88色综合天天免费| 老司机精品视频线观看86 | 韩国成人福利片在线播放| 一区二区三区四区在线播放 | 欧美另类久久久品| 成人黄色免费短视频| 久久99热狠狠色一区二区| 一二三四社区欧美黄| 欧美韩国日本一区| 日韩欧美中文字幕精品| 欧美日韩一级二级三级| 色综合夜色一区| 国产精品1024| 麻豆91在线观看|