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

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

?? raytrace.cpp

?? file code.zip are used to implement ray tracing technology.
?? CPP
字號:
#include <stdlib.h>
#include <math.h>
#include <iostream>
#include <string>
using namespace std;
#include <gl/glut.h>
#include "scene.h"
#include "camera.h" 
#include <io.h>
Camera cam; // global camera object 
Scene scn;

// Window size and raster starting position
int windowWidth = 0;
int windowHeight = 0;
int rasterX = 0;
int rasterY = 0;
float amount = 1.0;
int blockSize =1;
string BMPfilename = "";
unsigned char* imgBuffer = NULL;

void myKeyboard(unsigned char key, int x, int y);
void reshapeScene(int width, int height);
void myDisplay();

// Has the scene been fully raytraced yet?
bool traced = false;

// Is the image buffer inverted (it is initially)?
bool inverted = true; 
bool roll = true;
//<<<<<<<<<<<<<<<<<<<<<< getFileName >>>>>>>>>>>>>>>>.
void getFileName(string& fname)
{ // display list of all .sdl files in current directory - needs #include <io.h>
	struct _finddata_t sdl_file;
	long hFile;
	if( (hFile = _findfirst("*.sdl", &sdl_file)) == -1L)
		 cout << " No *.sdl files in current directory!\n";
	else
	{
			cout << "Available *.sdl files\n";
			cout << "FILE NAME\t\tSIZE\n";
			cout << sdl_file.name << "\t\t"<< sdl_file.size << endl;
			while( _findnext( hFile, &sdl_file) == 0)
					cout << sdl_file.name <<"\t\t";
	}
	_findclose(hFile);
	cout << "type file name: (omit the '.sdl') \n";
	cin >> fname; // user types his/her choice
	fname += ".sdl"; //append suffix
}
//<<<<<<<<<<<<<<<<<<<<<< main >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
int  main(int argc, char **argv) 
{ 
	// Variables for the command line parameters
	string fname;
	bool BMP_OUTPUT = false;
	bool OPENGL_OUT = false;
	bool DYNAMIC_OPENGL_OUT = false;
	size_t xRes = 640, yRes = 480;

	// Check that at least one type of output was specified.  If not, default to dynamic.
	if(!BMP_OUTPUT && !OPENGL_OUT && !DYNAMIC_OPENGL_OUT)
		DYNAMIC_OPENGL_OUT = true;

	// Read the SDL file
	scn.xRes = xRes;
	scn.yRes = yRes;
	scn.aspect = xRes/(double)yRes;
	getFileName(fname);
	scn.read(fname);

	// Build the camera
	
	cam.set(scn.eye, scn.lookAt, scn.up);
	cam.setShape(scn.angle, scn.aspect, scn.nearPlane, scn.farPlane);
	cam.setResolution(scn.yRes, scn.xRes);

	// Raytrace now if the output is not dynamic.
	if(!DYNAMIC_OPENGL_OUT)
	{
		imgBuffer = cam.raytrace(scn, blockSize, false);
		traced = true;
	}

	if(OPENGL_OUT || DYNAMIC_OPENGL_OUT)
	{
		// Draw the buffer to an OpenGL window
		windowWidth = scn.xRes;
		windowHeight = scn.yRes;

		glutInit(&argc, argv);
		glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
		glutInitWindowSize(windowWidth, windowHeight);
		glutInitWindowPosition(50, 50);
		glutCreateWindow("RayTracer");

		glutKeyboardFunc(myKeyboard);
		glutDisplayFunc(myDisplay);
		glutReshapeFunc(reshapeScene);

		// Display the buffer
		glutMainLoop();
	}

	// Clean up
	if(imgBuffer != NULL)
		delete [] imgBuffer;

	return 0;
}

void invertBuffer(unsigned char* &buffer)
{
	unsigned char* flippedBuffer = new unsigned char[scn.xRes*scn.yRes*3];

	// Turn the buffer upside down because BMP format stores it that way
    for(size_t i=0; i<scn.yRes; i++)
    {
        for(size_t j=0; j<scn.xRes; j++)
        {
            flippedBuffer[i*scn.xRes*3+3*j]   = buffer[(scn.yRes-1-i)*scn.xRes*3+3*j];
            flippedBuffer[i*scn.xRes*3+3*j+1] = buffer[(scn.yRes-1-i)*scn.xRes*3+3*j+1];
            flippedBuffer[i*scn.xRes*3+3*j+2] = buffer[(scn.yRes-1-i)*scn.xRes*3+3*j+2];
        }
    }

	// Replace original with the flipped version
	delete [] buffer;
	buffer = flippedBuffer;
}

// The GLUT keyboard callback function.  Processes key presses.
void myKeyboard(unsigned char key, int x, int y)
{
	switch(key){
		case 'r':
			inverted = true;
			break; 
		case 'a':
			cam.slide(0,0,-amount);
			
			break;
		case 'b':
			cam.slide(0,0,amount);
			
			break;
		default:
			cout<<"\n not a valid command\n";
	}
	glutPostRedisplay();
}

// This is the GLUT reshape callback function.  It is called whenever the window is reshaped
// and also when it is initially created.
void reshapeScene(int width, int height)
{
    windowWidth = width;
    windowHeight = height;

    rasterX = (int)floor(windowWidth/2.0 - scn.xRes/2.0);
    rasterY = (int)floor(windowHeight/2.0 - scn.yRes/2.0);

    if(rasterY < 0) rasterY = 0;
    if(rasterX < 0) rasterX = 0;

	glMatrixMode(GL_PROJECTION); glLoadIdentity();
	glMatrixMode(GL_MODELVIEW); glLoadIdentity();

	gluOrtho2D(0, width, 0, height);
    glViewport(0, 0, width, height);

	glutPostRedisplay();
}

// The GLUT display callback function.  Called everytime the window is to be redrawn.
void myDisplay()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	if(!traced)
	{
		
			imgBuffer = cam.raytrace(scn, blockSize, true);
			if(imgBuffer == NULL) cerr << "Error: Image buffer is empty (possibly out of memory).\n";
			traced = true;
		
		
	}

	else if(imgBuffer != NULL)
	{
		// The BMP buffer is upside-down so invert it before displaying it
		if(inverted)
		{
			invertBuffer(imgBuffer);
			inverted = false;
		}
		glRasterPos2i(rasterX, rasterY);
		glDrawPixels(scn.xRes, scn.yRes, GL_RGB, GL_UNSIGNED_BYTE, imgBuffer);
		
	}
	

	glFlush();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月天国产精品| 久久午夜老司机| 欧美一区二区在线播放| 久久久国产精品麻豆| 一区二区三区欧美| 国产成人午夜视频| 欧美一区二区二区| 亚洲成人一区二区在线观看| 国产99精品国产| 日韩免费一区二区| 亚洲国产日韩a在线播放| 成人精品鲁一区一区二区| 欧美一级精品在线| 婷婷国产在线综合| 欧美专区日韩专区| 亚洲色图欧洲色图婷婷| 国产麻豆成人精品| 色8久久精品久久久久久蜜| 国产精品一二三区在线| 日本午夜一本久久久综合| jlzzjlzz欧美大全| 亚洲主播在线观看| 一本一本久久a久久精品综合麻豆| 日韩欧美激情一区| 天堂一区二区在线免费观看| 欧美中文字幕一区二区三区| 国产精品午夜在线观看| 国产精品一区专区| 欧美激情一区在线| 国产高清在线精品| 欧美国产成人精品| av日韩在线网站| 亚洲男人的天堂在线aⅴ视频| 成人av手机在线观看| 国产精品免费av| av在线播放不卡| 亚洲欧美日韩电影| 欧美亚洲综合在线| 亚洲国产人成综合网站| 欧美日韩高清在线播放| 日本aⅴ亚洲精品中文乱码| 欧美另类久久久品| 久久99精品国产麻豆不卡| 精品999久久久| 欧美日韩在线播| 天堂va蜜桃一区二区三区漫画版| 欧美人xxxx| 狠狠色狠狠色合久久伊人| 国产午夜一区二区三区| 波多野结衣中文字幕一区二区三区| 精品福利一二区| 成年人国产精品| 亚洲第一成年网| 26uuu亚洲综合色| 91免费国产在线| 婷婷开心久久网| 久久综合久久综合亚洲| 丁香六月久久综合狠狠色| 日韩伦理免费电影| 91精品国产全国免费观看 | 韩国三级在线一区| 欧美国产日韩精品免费观看| 色综合久久中文综合久久牛| 亚洲一区二区三区在线看| 欧美一级高清片| youjizz久久| 日韩电影在线观看网站| 26uuu色噜噜精品一区| 99re亚洲国产精品| 日本一不卡视频| 中文字幕+乱码+中文字幕一区| 91首页免费视频| 看电视剧不卡顿的网站| 中文字幕亚洲综合久久菠萝蜜| 欧美性猛片aaaaaaa做受| 久久99精品国产91久久来源| 亚洲另类中文字| 精品不卡在线视频| 欧洲亚洲精品在线| 国产成人精品综合在线观看 | 色噜噜狠狠成人中文综合 | 亚洲国产精品嫩草影院| 久久精品视频在线看| 欧美色倩网站大全免费| 国产成人精品亚洲777人妖| 亚洲国产一区二区视频| 欧美—级在线免费片| 欧美一区二区三区四区五区| 色噜噜偷拍精品综合在线| 韩国av一区二区三区| 午夜精品久久久久久久久久| 国产精品美女久久福利网站| 欧美成人精品高清在线播放 | 91小视频免费观看| 国产成人免费视频网站| 美国毛片一区二区三区| 亚洲一级在线观看| www.欧美亚洲| 国产精品羞羞答答xxdd| 美女高潮久久久| 日韩制服丝袜av| 亚洲午夜久久久久久久久久久| 中文字幕一区二区三区四区不卡 | 激情综合色播激情啊| 天天射综合影视| 夜夜操天天操亚洲| 亚洲免费av高清| 亚洲欧洲在线观看av| 中文成人av在线| 中文字幕在线观看一区| 中文一区二区完整视频在线观看| 久久久91精品国产一区二区精品| 日韩欧美在线观看一区二区三区| 欧美老人xxxx18| 欧美精品在欧美一区二区少妇| 欧美无砖砖区免费| 欧美性视频一区二区三区| 欧美伊人久久久久久午夜久久久久| 一本色道久久综合狠狠躁的推荐| 99re视频精品| 欧美在线小视频| 欧美日韩成人在线| 欧美一区二区三区不卡| 日韩欧美三级在线| 久久综合久久综合九色| 国产婷婷色一区二区三区四区| 日本一二三四高清不卡| 自拍av一区二区三区| 一个色在线综合| 免费高清视频精品| 韩国三级在线一区| 成人网在线播放| 欧美色国产精品| 日韩欧美久久久| 中文字幕不卡在线| 亚洲综合清纯丝袜自拍| 日韩国产成人精品| 黄色日韩网站视频| 91丝袜国产在线播放| 欧美日本一区二区| 久久久久久久久久久久电影| 国产精品网站在线播放| 亚洲福利视频一区| 国产馆精品极品| 欧美午夜精品理论片a级按摩| 911精品产国品一二三产区| 精品国产区一区| 亚洲美女电影在线| 久久成人18免费观看| 91亚洲精品久久久蜜桃| 日韩欧美一级二级三级| 国产精品欧美极品| 天天免费综合色| 成人精品gif动图一区| 欧美日韩美少妇| 久久久欧美精品sm网站| 一区二区不卡在线播放 | 91免费在线播放| 欧美成人福利视频| 亚洲综合一二三区| 国产凹凸在线观看一区二区| 欧美日韩在线不卡| 亚洲国产成人私人影院tom| 亚洲a一区二区| av在线免费不卡| 久久久欧美精品sm网站| 日韩精品一卡二卡三卡四卡无卡| 国产成a人亚洲| 欧美一级午夜免费电影| 九九视频精品免费| 欧美性生交片4| 亚洲欧美自拍偷拍色图| 蜜臀av亚洲一区中文字幕| 色久优优欧美色久优优| 久久九九国产精品| 免费成人在线观看视频| 在线观看日韩av先锋影音电影院| 国产日产亚洲精品系列| 免费看黄色91| 欧美视频一区二区三区四区 | 首页国产丝袜综合| 91影院在线观看| 国产拍欧美日韩视频二区| 蜜臀av一级做a爰片久久| 91成人在线免费观看| 国产精品久久久一本精品| 国产精品资源网| 精品久久久久久久人人人人传媒 | 亚洲午夜免费福利视频| 91浏览器在线视频| 亚洲国产精品成人综合色在线婷婷 | 91视视频在线直接观看在线看网页在线看| 精品日韩av一区二区| 免费不卡在线视频| 欧美精品v国产精品v日韩精品| 一区二区三区日韩精品| 在线观看一区日韩| 一区二区三区四区不卡视频| 色综合久久天天| 亚洲综合区在线|