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

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

?? demo8_2.cpp

?? 一本外國人寫的關于3D游戲編程的書的源碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// DEMO8_2.CPP 8-bit line clipping demo

// INCLUDES ///////////////////////////////////////////////

#define WIN32_LEAN_AND_MEAN  // just say no to MFC

#define INITGUID

#include <windows.h>   // include important windows stuff
#include <windowsx.h> 
#include <mmsystem.h>
#include <iostream.h> // include important C/C++ stuff
#include <conio.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <string.h>
#include <stdarg.h>
#include <stdio.h> 
#include <math.h>
#include <io.h>
#include <fcntl.h>

#include <ddraw.h> // include directdraw

// DEFINES ////////////////////////////////////////////////

// defines for windows 
#define WINDOW_CLASS_NAME "WINCLASS1"

// default screen size
#define SCREEN_WIDTH    640  // size of screen
#define SCREEN_HEIGHT   480
#define SCREEN_BPP      8    // bits per pixel

#define BITMAP_ID            0x4D42 // universal id for a bitmap
#define MAX_COLORS_PALETTE   256


// TYPES //////////////////////////////////////////////////////

// basic unsigned types
typedef unsigned short USHORT;
typedef unsigned short WORD;
typedef unsigned char  UCHAR;
typedef unsigned char  BYTE;

// PROTOTYPES  //////////////////////////////////////////////

int DDraw_Fill_Surface(LPDIRECTDRAWSURFACE7 lpdds,int color);

int Draw_Line(int x0, int y0, int x1, int y1, UCHAR color, UCHAR *vb_start, int lpitch);

int Draw_Clip_Line(int x0,int y0, int x1, int y1,UCHAR color, 
                    UCHAR *dest_buffer, int lpitch);

int Clip_Line(int &x1,int &y1,int &x2, int &y2);

// MACROS /////////////////////////////////////////////////

// tests if a key is up or down
#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
#define KEYUP(vk_code)   ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)

// initializes a direct draw struct
#define DDRAW_INIT_STRUCT(ddstruct) { memset(&ddstruct,0,sizeof(ddstruct)); ddstruct.dwSize=sizeof(ddstruct); }

// GLOBALS ////////////////////////////////////////////////

HWND      main_window_handle = NULL; // globally track main window
int       window_closed      = 0;    // tracks if window is closed
HINSTANCE hinstance_app      = NULL; // globally track hinstance

// directdraw stuff
LPDIRECTDRAW7         lpdd         = NULL;   // dd object
LPDIRECTDRAWSURFACE7  lpddsprimary = NULL;   // dd primary surface
LPDIRECTDRAWSURFACE7  lpddsback    = NULL;   // dd back surface
LPDIRECTDRAWPALETTE   lpddpal      = NULL;   // a pointer to the created dd palette
LPDIRECTDRAWCLIPPER   lpddclipper  = NULL;   // dd clipper
PALETTEENTRY          palette[256];          // color palette
PALETTEENTRY          save_palette[256];     // used to save palettes
DDSURFACEDESC2        ddsd;                  // a direct draw surface description struct
DDBLTFX               ddbltfx;               // used to fill
DDSCAPS2              ddscaps;               // a direct draw surface capabilities struct
HRESULT               ddrval;                // result back from dd calls
DWORD                 start_clock_count = 0; // used for timing


// global clipping region

int min_clip_x = ((SCREEN_WIDTH/2) - 100),      // clipping rectangle 
    max_clip_x = ((SCREEN_WIDTH/2) + 100),
    min_clip_y = ((SCREEN_HEIGHT/2) - 100),
    max_clip_y = ((SCREEN_HEIGHT/2) + 100);

char buffer[80];                             // general printing buffer

// FUNCTIONS ////////////////////////////////////////////////

inline int Draw_Pixel(int x, int y,int color,
               UCHAR *video_buffer, int lpitch)
{
// this function plots a single pixel at x,y with color

video_buffer[x + y*lpitch] = color;

// return success
return(1);

} // end Draw_Pixel

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

int DDraw_Fill_Surface(LPDIRECTDRAWSURFACE7 lpdds,int color)
{
DDBLTFX ddbltfx; // this contains the DDBLTFX structure

// clear out the structure and set the size field 
DDRAW_INIT_STRUCT(ddbltfx);

// set the dwfillcolor field to the desired color
ddbltfx.dwFillColor = color; 

// ready to blt to surface
lpdds->Blt(NULL,       // ptr to dest rectangle
           NULL,       // ptr to source surface, NA            
           NULL,       // ptr to source rectangle, NA
           DDBLT_COLORFILL | DDBLT_WAIT,   // fill and wait                   
           &ddbltfx);  // ptr to DDBLTFX structure

// return success
return(1);
} // end DDraw_Fill_Surface

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

int Draw_Clip_Line(int x0,int y0, int x1, int y1,UCHAR color, 
                    UCHAR *dest_buffer, int lpitch)
{
// this helper function draws a clipped line

int cxs, cys,
	cxe, cye;

// clip and draw each line
cxs = x0;
cys = y0;
cxe = x1;
cye = y1;

// clip the line
if (Clip_Line(cxs,cys,cxe,cye))
	Draw_Line(cxs, cys, cxe,cye,color,dest_buffer,lpitch);

// return success
return(1);

} // end Draw_Clip_Line

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

int Clip_Line(int &x1,int &y1,int &x2, int &y2)
{
// this function clips the sent line using the globally defined clipping
// region

// internal clipping codes
#define CLIP_CODE_C  0x0000
#define CLIP_CODE_N  0x0008
#define CLIP_CODE_S  0x0004
#define CLIP_CODE_E  0x0002
#define CLIP_CODE_W  0x0001

#define CLIP_CODE_NE 0x000a
#define CLIP_CODE_SE 0x0006
#define CLIP_CODE_NW 0x0009 
#define CLIP_CODE_SW 0x0005

int xc1=x1, 
    yc1=y1, 
	xc2=x2, 
	yc2=y2;

int p1_code=0, 
    p2_code=0;

// determine codes for p1 and p2
if (y1 < min_clip_y)
	p1_code|=CLIP_CODE_N;
else
if (y1 > max_clip_y)
	p1_code|=CLIP_CODE_S;

if (x1 < min_clip_x)
	p1_code|=CLIP_CODE_W;
else
if (x1 > max_clip_x)
	p1_code|=CLIP_CODE_E;

if (y2 < min_clip_y)
	p2_code|=CLIP_CODE_N;
else
if (y2 > max_clip_y)
	p2_code|=CLIP_CODE_S;

if (x2 < min_clip_x)
	p2_code|=CLIP_CODE_W;
else
if (x2 > max_clip_x)
	p2_code|=CLIP_CODE_E;

// try and trivially reject
if ((p1_code & p2_code)) 
	return(0);

// test for totally visible, if so leave points untouched
if (p1_code==0 && p2_code==0)
	return(1);

// determine end clip point for p1
switch(p1_code)
	  {
	  case CLIP_CODE_C: break;

	  case CLIP_CODE_N:
		   {
		   yc1 = min_clip_y;
		   xc1 = x1 + 0.5+(min_clip_y-y1)*(x2-x1)/(y2-y1);
		   } break;
	  case CLIP_CODE_S:
		   {
		   yc1 = max_clip_y;
		   xc1 = x1 + 0.5+(max_clip_y-y1)*(x2-x1)/(y2-y1);
		   } break;

	  case CLIP_CODE_W:
		   {
		   xc1 = min_clip_x;
		   yc1 = y1 + 0.5+(min_clip_x-x1)*(y2-y1)/(x2-x1);
		   } break;
		
	  case CLIP_CODE_E:
		   {
		   xc1 = max_clip_x;
		   yc1 = y1 + 0.5+(max_clip_x-x1)*(y2-y1)/(x2-x1);
		   } break;

	// these cases are more complex, must compute 2 intersections
	  case CLIP_CODE_NE:
		   {
		   // north hline intersection
		   yc1 = min_clip_y;
		   xc1 = x1 + 0.5+(min_clip_y-y1)*(x2-x1)/(y2-y1);

		   // test if intersection is valid, of so then done, else compute next
			if (xc1 < min_clip_x || xc1 > max_clip_x)
				{
				// east vline intersection
				xc1 = max_clip_x;
				yc1 = y1 + 0.5+(max_clip_x-x1)*(y2-y1)/(x2-x1);
				} // end if

		   } break;
	  
	  case CLIP_CODE_SE:
      	   {
		   // south hline intersection
		   yc1 = max_clip_y;
		   xc1 = x1 + 0.5+(max_clip_y-y1)*(x2-x1)/(y2-y1);	

		   // test if intersection is valid, of so then done, else compute next
		   if (xc1 < min_clip_x || xc1 > max_clip_x)
		      {
			  // east vline intersection
			  xc1 = max_clip_x;
			  yc1 = y1 + 0.5+(max_clip_x-x1)*(y2-y1)/(x2-x1);
			  } // end if

		   } break;
	    
	  case CLIP_CODE_NW: 
      	   {
		   // north hline intersection
		   yc1 = min_clip_y;
		   xc1 = x1 + 0.5+(min_clip_y-y1)*(x2-x1)/(y2-y1);
		   
		   // test if intersection is valid, of so then done, else compute next
		   if (xc1 < min_clip_x || xc1 > max_clip_x)
		      {
			  xc1 = min_clip_x;
		      yc1 = y1 + 0.5+(min_clip_x-x1)*(y2-y1)/(x2-x1);	
			  } // end if

		   } break;
	  	  
	  case CLIP_CODE_SW:
		   {
		   // south hline intersection
		   yc1 = max_clip_y;
		   xc1 = x1 + 0.5+(max_clip_y-y1)*(x2-x1)/(y2-y1);	
		   
		   // test if intersection is valid, of so then done, else compute next
		   if (xc1 < min_clip_x || xc1 > max_clip_x)
		      {
			  xc1 = min_clip_x;
		      yc1 = y1 + 0.5+(min_clip_x-x1)*(y2-y1)/(x2-x1);	
			  } // end if

		   } break;

	  default:break;

	  } // end switch

// determine clip point for p2
switch(p2_code)
	  {
	  case CLIP_CODE_C: break;

	  case CLIP_CODE_N:
		   {
		   yc2 = min_clip_y;
		   xc2 = x2 + (min_clip_y-y2)*(x1-x2)/(y1-y2);
		   } break;

	  case CLIP_CODE_S:
		   {
		   yc2 = max_clip_y;
		   xc2 = x2 + (max_clip_y-y2)*(x1-x2)/(y1-y2);
		   } break;

	  case CLIP_CODE_W:
		   {
		   xc2 = min_clip_x;
		   yc2 = y2 + (min_clip_x-x2)*(y1-y2)/(x1-x2);
		   } break;
		
	  case CLIP_CODE_E:
		   {
		   xc2 = max_clip_x;
		   yc2 = y2 + (max_clip_x-x2)*(y1-y2)/(x1-x2);
		   } break;

		// these cases are more complex, must compute 2 intersections
	  case CLIP_CODE_NE:
		   {
		   // north hline intersection
		   yc2 = min_clip_y;
		   xc2 = x2 + 0.5+(min_clip_y-y2)*(x1-x2)/(y1-y2);

		   // test if intersection is valid, of so then done, else compute next
			if (xc2 < min_clip_x || xc2 > max_clip_x)
				{
				// east vline intersection
				xc2 = max_clip_x;
				yc2 = y2 + 0.5+(max_clip_x-x2)*(y1-y2)/(x1-x2);
				} // end if

		   } break;
	  
	  case CLIP_CODE_SE:
      	   {
		   // south hline intersection
		   yc2 = max_clip_y;
		   xc2 = x2 + 0.5+(max_clip_y-y2)*(x1-x2)/(y1-y2);	

		   // test if intersection is valid, of so then done, else compute next
		   if (xc2 < min_clip_x || xc2 > max_clip_x)
		      {
			  // east vline intersection
			  xc2 = max_clip_x;
			  yc2 = y2 + 0.5+(max_clip_x-x2)*(y1-y2)/(x1-x2);
			  } // end if

		   } break;
	    
	  case CLIP_CODE_NW: 
      	   {
		   // north hline intersection
		   yc2 = min_clip_y;
		   xc2 = x2 + 0.5+(min_clip_y-y2)*(x1-x2)/(y1-y2);
		   
		   // test if intersection is valid, of so then done, else compute next
		   if (xc2 < min_clip_x || xc2 > max_clip_x)
		      {
			  xc2 = min_clip_x;
		      yc2 = y2 + 0.5+(min_clip_x-x2)*(y1-y2)/(x1-x2);	
			  } // end if

		   } break;
	  	  
	  case CLIP_CODE_SW:
		   {
		   // south hline intersection
		   yc2 = max_clip_y;
		   xc2 = x2 + 0.5+(max_clip_y-y2)*(x1-x2)/(y1-y2);	
		   
		   // test if intersection is valid, of so then done, else compute next
		   if (xc2 < min_clip_x || xc2 > max_clip_x)
		      {
			  xc2 = min_clip_x;
		      yc2 = y2 + 0.5+(min_clip_x-x2)*(y1-y2)/(x1-x2);	
			  } // end if

		   } break;
	
	  default:break;

	  } // end switch

// do bounds check
if ((xc1 < min_clip_x) || (xc1 > max_clip_x) ||
	(yc1 < min_clip_y) || (yc1 > max_clip_y) ||
	(xc2 < min_clip_x) || (xc2 > max_clip_x) ||
	(yc2 < min_clip_y) || (yc2 > max_clip_y) )
	{
	return(0);
	} // end if

// store vars back
x1 = xc1;
y1 = yc1;
x2 = xc2;
y2 = yc2;

return(1);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品自拍动漫在线| 狠狠色丁香九九婷婷综合五月| 欧美一区二区视频在线观看| 成人免费视频免费观看| 日韩影院精彩在线| 亚洲免费观看在线视频| 国产亚洲欧洲997久久综合| 欧美日韩精品福利| 色综合中文字幕国产| 奇米777欧美一区二区| 亚洲精品一卡二卡| 国产精品久久久久三级| 精品国产三级a在线观看| 精品视频在线免费| 91啪亚洲精品| 成人丝袜18视频在线观看| 美女尤物国产一区| 日韩高清一级片| 一区二区在线看| 一区二区中文视频| 国产精品人成在线观看免费| 精品国精品国产| 欧美一区二区在线免费播放| 欧美性色aⅴ视频一区日韩精品| bt欧美亚洲午夜电影天堂| 国产精品一区专区| 国产一区二区精品久久99| 久草中文综合在线| 捆绑变态av一区二区三区| 日韩不卡免费视频| 天堂蜜桃91精品| 午夜精品免费在线观看| 一区二区欧美视频| 亚洲国产精品一区二区www| 一级特黄大欧美久久久| 一区二区三区高清| 亚洲一区视频在线| 亚洲国产一区二区三区| 亚洲小说欧美激情另类| 亚洲伦理在线精品| 一区二区三区加勒比av| 亚洲永久免费av| 亚洲国产欧美日韩另类综合| 一级日本不卡的影视| 午夜精品一区二区三区免费视频 | 欧美天堂一区二区三区| 91蜜桃免费观看视频| 日本乱人伦aⅴ精品| 91久久精品一区二区二区| 在线观看一区二区精品视频| 欧美日韩一区中文字幕| 日韩欧美电影在线| 久久久国产午夜精品| 国产精品午夜电影| 亚洲女爱视频在线| 五月天久久比比资源色| 裸体在线国模精品偷拍| 高清国产一区二区| 色综合网色综合| 欧美日韩在线观看一区二区| 日韩一区二区免费高清| 国产清纯美女被跳蛋高潮一区二区久久w | 另类欧美日韩国产在线| 国产精品18久久久久久久久久久久| 国产成人综合视频| 91久久精品日日躁夜夜躁欧美| 欧美日韩日日骚| 精品国产乱码久久久久久1区2区 | 久久精品水蜜桃av综合天堂| 中文字幕第一区综合| 一区二区三区中文在线| 看电影不卡的网站| 99久久99久久免费精品蜜臀| 欧美高清视频在线高清观看mv色露露十八 | 午夜精品爽啪视频| 国产一区二区三区| 色嗨嗨av一区二区三区| 精品久久久久香蕉网| 18欧美乱大交hd1984| 日本在线不卡视频| av福利精品导航| 亚洲超丰满肉感bbw| 精品一区二区三区免费| 色久综合一二码| 精品国产乱码久久| 亚洲国产一区二区三区青草影视| 精品一区二区三区香蕉蜜桃 | 亚洲乱码国产乱码精品精可以看| 日韩精品亚洲一区二区三区免费| 懂色av一区二区三区免费看| 在线电影院国产精品| 欧美激情一区二区三区蜜桃视频| 亚洲一二三四久久| 粉嫩绯色av一区二区在线观看| 欧美裸体一区二区三区| 国产欧美精品在线观看| 日韩精品免费视频人成| 91在线观看成人| 亚洲精品一区二区三区福利 | 成人免费av在线| 欧美一区二区视频在线观看2022| 亚洲天堂精品视频| 国产91丝袜在线播放0| 欧美一区中文字幕| 亚洲风情在线资源站| www.日韩大片| 国产亚洲精品aa午夜观看| 日本午夜精品一区二区三区电影| 91激情五月电影| 国产精品伦一区| 国产精一品亚洲二区在线视频| 欧美区视频在线观看| 亚洲香蕉伊在人在线观| 色香蕉久久蜜桃| 亚洲欧美一区二区三区极速播放| 国产福利一区二区三区| 精品国产91乱码一区二区三区 | 亚洲欧美自拍偷拍| 国产成人亚洲综合a∨猫咪| 欧美va亚洲va香蕉在线| 日韩av一区二区在线影视| 欧美午夜一区二区三区| 一区二区三区高清不卡| 色视频欧美一区二区三区| 亚洲欧美成aⅴ人在线观看| a级精品国产片在线观看| 国产精品国产a级| 成人av免费在线| 亚洲视频免费在线| 色婷婷香蕉在线一区二区| 亚洲免费在线观看视频| 日本高清无吗v一区| 亚洲激情自拍偷拍| 精品视频一区三区九区| 亚洲国产成人av网| 欧美日韩一区二区三区视频| 亚洲一区二区三区三| 欧美日韩另类一区| 日本中文一区二区三区| 欧美成人乱码一区二区三区| 精品无人区卡一卡二卡三乱码免费卡| 日韩一区二区在线看| 国产在线播放一区三区四| 久久久久久一级片| 成人黄色电影在线| 亚洲欧美区自拍先锋| 欧美体内she精视频| 日本女人一区二区三区| 精品乱人伦一区二区三区| 成人一区在线观看| 亚洲激情图片一区| 日韩一区二区在线看| 国产成人午夜电影网| 亚洲三级小视频| 欧美人妇做爰xxxⅹ性高电影| 久久成人免费网| 国产精品视频免费| 欧美午夜不卡在线观看免费| 免费在线一区观看| 欧美激情一区二区三区蜜桃视频| 色综合色狠狠综合色| 日韩精品一区第一页| 国产日韩视频一区二区三区| 色综合久久中文综合久久牛| 日韩专区欧美专区| 国产视频亚洲色图| 在线观看国产一区二区| 麻豆免费看一区二区三区| 国产精品嫩草影院av蜜臀| 欧美综合色免费| 激情久久五月天| 夜夜嗨av一区二区三区 | 一区二区三区精密机械公司| 日韩一区二区三| www.在线欧美| 日本一不卡视频| 国产欧美日产一区| 91麻豆精品国产91久久久资源速度 | 一本一道久久a久久精品| 日日夜夜精品免费视频| 中文字幕免费观看一区| 欧美一区二区三区四区五区| 92精品国产成人观看免费| 美美哒免费高清在线观看视频一区二区| 欧美高清在线视频| 91精品国产福利在线观看| 99国产精品久久久久久久久久久| 日韩激情视频在线观看| 国产精品电影一区二区三区| 欧美电影免费观看高清完整版在| 91美女片黄在线观看| 国产精品综合在线视频| 日韩av中文字幕一区二区| 亚洲免费观看高清完整版在线观看熊 | 蜜臀久久99精品久久久画质超高清| 1区2区3区精品视频| 久久五月婷婷丁香社区| 91精品国产aⅴ一区二区| 欧洲一区二区三区免费视频| 国产精品91一区二区|