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

📄 main.cpp

📁 光滑质点无网格法SPH并行计算程序
💻 CPP
字号:
//      ___                       ___           ___           ___       ___     //     /\__\          ___        /\__\         /\  \         /\__\     /\  \.   //    /::|  |        /\  \      /::|  |       /::\  \       /:/  /    /::\  \.  //   /:|:|  |        \:\  \    /:|:|  |      /:/\:\  \     /:/  /    /:/\:\  \. //  /:/|:|__|__      /::\__\  /:/|:|  |__   /:/  \:\  \   /:/  /    /::\~\:\  \.// /:/ |::::\__\  __/:/\/__/ /:/ |:| /\__\ /:/__/_\:\__\ /:/__/    /:/\:\ \:\__\.// \/__/~~/:/  / /\/:/  /    \/__|:|/:/  / \:\  /\ \/__/ \:\  \    \:\~\:\ \/__///       /:/  /  \::/__/         |:/:/  /   \:\ \:\__\    \:\  \    \:\ \:\__\. //      /:/  /    \:\__\         |::/  /     \:\/:/  /     \:\  \    \:\ \/__/  //     /:/  /      \/__/         /:/  /       \::/  /       \:\__\    \:\__\.   //     \/__/                     \/__/         \/__/         \/__/     \/__/    // // =============================================================================//                       Minimalist OpenGL Environment// =============================================================================//// Copyright 2007 Balazs Domonkos// // 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.//// Simple Application data preloader// mingle.h should be included before all other// OpenGL headers#include <mingle.h>using namespace MinGLE;#include <GL/glut.h>#include <iostream>class SceneRenderer : public WindowListener {	protected:		double mScale;		bool mRender;	public:		SceneRenderer() :			mScale(0.3), mRender(true)		{		}			double *getScalePtr() {			return &mScale;		}		bool *getRenderPtr() {			return &mRender;		}    protected:		virtual bool onRender() {	    	if(mRender) glutSolidTeapot(mScale);	    		    	// Enable the next window listener to render	    	return false;		}};class GuiDemo : public GuiSheet {	protected:		Font *mFont;		TextField *text;	public:		GuiDemo(double *scale, bool *render)		{			mFont = new Font("zekton.xml");			TextField::setDefaultFont(mFont);			Panel *panel = new Panel("myPanel");			panel->setColor(0.1, 0.0, 0.0);			panel->setHeightAbs(64);			add(panel);						text = new TextField("myText", "??? FPS");			text->setColor(0.2, 0.3, 0.6);			text->setPositionAbs(8, 8);			text->setWidthRel(0.5);			panel->add(text);						CheckBox *checkBox = new CheckBox("myCheckBox", true);			checkBox->setLeftRel(0.5);			checkBox->setTopAbs(8);			checkBox->setUserData(render);			panel->add(checkBox);						Slider *mSlider = new Slider("mySlider");			mSlider->setLeftRel(0.5);			mSlider->setTopAbs(32);			mSlider->setWidthAbs(200);			mSlider->setUserData(scale);			panel->add(mSlider);		}				~GuiDemo() {			delete mFont;		}		// This method is called before rendering the gui		virtual void onUpdate() {			text->setText(StringUtils::toString(mWindow->getFrameRate(), 2) + " FPS");		}};class Preloader : public WindowListener, Process {	protected:		SceneRenderer *mSceneRenderer;	public:		Preloader(SceneRenderer *sceneRenderer) :			mSceneRenderer(sceneRenderer) 		{		}		protected:    	virtual void onRegistered() {		    glMatrixMode(GL_PROJECTION);		    gluPerspective(90.0, (double) mWindow->getWidth() / mWindow->getHeight(), 0.01, 100.0);		    glMatrixMode(GL_MODELVIEW);			gluLookAt(1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);			glColor4f(1.0, 1.0, 1.0, 0.9);    		// Start the thread    		start();    	}		virtual bool onRender() {			// Check load finish			if(isFinished()) {				switchSceneRenderer();				return true;			}						// Render "hourglass"		    glMatrixMode(GL_MODELVIEW);	    	glPushMatrix();	    	glRotatef(360.0*mStatus, 0.0, 1.0, 0.0);	    	glutSolidTeapot(0.25);			//glEnable(GL_BLEND);	// TODO			glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);			glScalef(1.0, mStatus, 1.0);	    	glutSolidCube(0.7);			glDisable(GL_BLEND);	    	glPopMatrix();						return false;		}				virtual void process() {			while(mStatus < 1.0) {				Thread::sleep(0.05);				mStatus += 0.01;			}		}				void switchSceneRenderer() {			Window *win = mWindow;		    // Detach this renderer 			mWindow->removeWindowListener(this);			// Register the scene renderer			win->registerWindowListener(mSceneRenderer);			// Add navigator			win->registerWindowListener(new ExaminerNavigator());			// Register gui sheet			// Note that the order of the rendering is:			// (ApplicationKeyHandler) -> SceneRenderer -> (ExaminerNavigator) -> GuiSheet			// but the order of input handling is reversed:			// GuiSheet -> ExaminerNavigator -> SceneRenderer -> ApplicationKeyHandler			GuiDemo *guiDemo = new GuiDemo(mSceneRenderer->getScalePtr(), mSceneRenderer->getRenderPtr());			win->registerWindowListener(guiDemo);						// Kick the window (TODO)			win->setSize(win->getWidth(), win->getHeight()+1);    		win->setRenderMode(WindowAttributes::RENDER_WHEN_IDLE);		}};int main(int argc, char **argv) {	try {    	// Initialize rendering system    	System::initialize(&argc, argv);    	// Create window    	Window *win = System::createWindow();    	win->setRenderMode(WindowAttributes::RENDER_ON_TIMER);    	win->setDesiredFPS(10);		// Add keyhandler		win->registerWindowListener(new ApplicationKeyHandler());    	// Create scene renderer, but do not register it    	SceneRenderer *sceneRenderer = new SceneRenderer();		// Create preloader for the scene renderer and register it		Preloader *preloader = new Preloader(sceneRenderer);    	win->registerWindowListener(preloader);    	// Setup OpenGL    	glEnable(GL_DEPTH_TEST);    	glShadeModel(GL_SMOOTH);        	GLfloat position[] = { 3.0f, 3.0f, 3.0f, 1.0f };    	GLfloat diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f };    	GLfloat specular[] = {1.0f, 1.0f, 1.0f , 1.0f};    	glEnable(GL_LIGHTING);    	glEnable(GL_LIGHT0);    	glLightfv(GL_LIGHT0, GL_POSITION, position);    	glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);    	glLightfv(GL_LIGHT0, GL_SPECULAR, specular);		GLfloat material_ambient[] = {0.25f, 0.25f, 0.25f};		GLfloat material_diffuse[] = {0.90f, 0.90f, 0.90f};		GLfloat material_specular[] = {0.90f, 0.90f, 0.90f};		GLfloat material_shininess = 25.0f;		glMaterialfv(GL_FRONT, GL_AMBIENT, material_ambient);		glMaterialfv(GL_FRONT, GL_DIFFUSE, material_diffuse);		glMaterialfv(GL_FRONT, GL_SPECULAR, material_specular);		glMaterialf(GL_FRONT, GL_SHININESS, material_shininess);		    	// Enter the event handing loop    	System::enterMainLoop();    		} catch(const Exception& e) {		std::cerr << "Error: " << e.mDescription << " (Thrown in " << e.mFile << ':'			<< e.mMethod << " line " << e.mLine << ')' << std::endl;	}    return 0;}

⌨️ 快捷键说明

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