WildMagic 简单图元(一)


#include <Wm5WindowApplication3.h>
#include <Wm5VisualEffectInstance.h>
using namespace Wm5;

class MyFrame : public WindowApplication3
{
WM5_DECLARE_INITIALIZE;
WM5_DECLARE_TERMINATE;
public:
MyFrame();
virtual bool OnInitialize();
virtual void OnTerminate();
virtual void OnIdle();
private:
NodePtr mScene;
Culler mCuller;
};
WM5_REGISTER_INITIALIZE(MyFrame);
WM5_REGISTER_TERMINATE(MyFrame);

WM5_WINDOW_APPLICATION(MyFrame)

MyFrame::MyFrame()
:WindowApplication3("Ocean", 0, 0, 1024, 800, Float4(0.0, 0.0, 1.0, 1.0))
{

}

bool MyFrame::OnInitialize()
{
if (!WindowApplication3::OnInitialize())
{
return false;
}
mCamera->SetFrustum(60.0f, GetAspectRatio(), 0.1f, 1000.0f);
APoint camPosition(16.0f, 0.0f, 0.0f);
AVector camDVector(-1.0f, 0.0f, 0.0f);
AVector camUVector(0.0f, 0.0f, 1.0f);
AVector camRVector = camDVector.Cross(camUVector);
mCamera->SetFrame(camPosition, camDVector, camUVector, camRVector);
mScene = new0 Node;
VertexFormat * vFormat = VertexFormat::Create(2,
VertexFormat::AU_POSITION, VertexFormat::AT_FLOAT3, 0,
VertexFormat::AU_COLOR, VertexFormat::AT_FLOAT3, 0);
TriMesh * mesh = StandardMesh(vFormat).Rectangle(32, 32, 16.0f, 16.0f);
VisualEffectInstance * instance = VertexColor3Effect::CreateUniqueInstance();
mesh->SetEffectInstance(instance);
mScene->AttachChild(mesh);
mScene->Update();
mCuller.SetCamera(mCamera);
mCuller.ComputeVisibleSet(mScene);
InitializeCameraMotion(0.01f, 0.001f);
InitializeObjectMotion(mScene);
return true;
}

void MyFrame::OnTerminate()
{
WindowApplication3::OnTerminate();
}

void MyFrame::OnIdle()
{
MeasureTime();
if (MoveCamera())
{
mCuller.ComputeVisibleSet(mScene);
}
if (MoveObject())
{
mScene->Update();
mCuller.ComputeVisibleSet(mScene);
}
if (mRenderer->PreDraw())
{
mRenderer->ClearBuffers();
mRenderer->Draw(mCuller.GetVisibleSet());
DrawFrameRate(8, GetHeight() - 8, Float4(0.0, 1.0, 0.0, 1.0));
mRenderer->PostDraw();
mRenderer->DisplayColorBuffer();
}
UpdateFrameCount();
}

WildMagic 简单图元(一)

时间: 2024-10-06 08:49:33

WildMagic 简单图元(一)的相关文章

CSharpGL(31)[译]OpenGL渲染管道那些事

+BIT祝威+悄悄在此留下版了个权的信息说: 开始 自认为对OpenGL的掌握到了一个小瓶颈,现在回头细细地捋一遍OpenGL渲染管道应当是一个不错的突破口. 本文通过阅读.翻译和扩展(https://www.opengl.org/wiki/Rendering_Pipeline_Overview)的方式,来逐步回顾总结一下OpenGL渲染管道,从而串联起OpenGL的所有知识点,并期望能在更高的层次上有所领悟. 另外,(https://www.opengl.org/wiki/Rendering_

OpenGL渲染管线概览

翻译自OpenGL Wiki:http://www.opengl.org/wiki/Rendering_Pipeline_Overview,如有错误还请赐教 管线 OpenGL渲染管线按以下方式工作: 1. 准备顶点数组数据并渲染 2. 顶点处理: 1. 每个顶点都要经过顶点着色器处理.每个顶点按所在数据流中的             顺序依次处理为输出顶点: 2. 可选的图元曲面细分阶段: 3. 可选的图元几何着色器处理,输出为一系列基本图元: 3. 顶点后处理,上一阶段的输出被调整或移位到不

OpenGl 知识

写在前面 啦啦啦,搞了很久的Unity Shaders,越学越觉得基础知识很重要.学Unity Shader的时候,总会想,shader到底是什么呢?shader的pipeline是什么呢?它们是怎么工作的?有哪些限制?等等问题.但这些问题,Unity是不负责告诉你的.它专注于how,而不是what和why.想要深入理解一些问题,感觉还是要从GL或者DX学起.后面会学习GL龙书第八版~当然Unity我也不会放弃的. 这篇文章旨在回答一些基本问题.We always rant about them

计算机图形学第一次实验

步骤一:查找相关函数,了解其功能和调用 https://blog.csdn.net/hebbely/article/details/69951068 https://blog.csdn.net/beibiannabian/article/details/77534803 https://blog.csdn.net/su20145104009/article/details/50216979中点画线法 简单图元代码: #include<GL/glut.h> #include<math.h&

简单的图元

一些用作练习的非常简单的图元. 1 #pragma once 2 #include <gl/glut.h> 3 4 class ScreenPt { 5 private: 6 GLint x, y; 7 8 public: 9 ScreenPt() { 10 x = y = 0; 11 } 12 void setCoords(GLint xCoordValue, GLint yCoordValue) { 13 x = xCoordValue; 14 y = yCoordValue; 15 }

opengl使用现在比较常用的方法来绘制简单几何图元

上一篇文章中也使用了比较老的方法glBegin 和 glEnd的方法来绘制了简单的集合图元,现在使用比较新的而且更高效的方法来绘制简单的集合图元. 这种方法与以前方法的不同点在对数据的处理上,glBegin 和 glEnd是要给出数据,然后直接来进行绘制,然而新的方法是现将数据保存到显存中,然后直接一个绘制命令,就可以直接从显卡内存中直接读取数据进行绘制,效率更高而且更方便. #include <GL/glew.h> #include <GL/freeglut.h> #includ

开源一个简单的c++软光栅渲染器

本文由zhangbaochong原创,转载请注明出处http://www.cnblogs.com/zhangbaochong/p/5751111.html 由于开学就大四面临找工作了,为了在简历上放点项目,最近又把上学期练手写的一个c++软光栅渲染demo拿出来重新改了改,稍微优化了一下,顺便增加了光照.虽然写的比较简单,但还是拿出来分享一下,希望能起个抛砖引玉的作用吧,也欢迎指点批评O(∩_∩)O~ (ps :项目代码只有3000行左右,性能方面也比较渣,高性能的光栅渲染可以看空明大大的SAL

简单的GDI+双缓冲的分析与实现

为什么要使用双缓冲绘制 在进行多图元绘制的时候: 因为是要一个一个画上去,所以每画一个图元,系统就要做一次图形的绘制操作,图形的重绘是很占用资源的,特别当需要重绘的图形数量很多的时候,所造成的消耗就特别大,导致闪烁,不流畅等情况.那么如何来解决这个问题呢? 那就是双缓冲. 它的基本原理就是 先在内存中开辟一块虚拟画布,然后将所有需要画的图元一个个先画在这块“虚拟画布”上,最后在一次性将整块“虚拟画布”画到真正的窗体上.因为所有的单个图形的绘制都不是真正的调用显示系统来“画”,所以不会占用显示系统

计算机图形学(二)输出图元_6_OpenGL曲线函数_1_圆生成算法

OpenGL曲线函数 生成圆和椭圆等基本曲线的函数并未作为图元功能包含在OpenGL核心库中.但该库包含了显示Bezier样条的功能,该曲线是由一组离散点定义的多项式.OpenGL实用库(GLU)中包含有球面和柱面等三维曲面函数以及生成B样条的函数,它是包含简化Bezier曲线的样条曲线的总集.我们可以使用有理B样条显示圆.椭圆和其他二维曲线.此外,OpenGL实用工具包(GLUT)中还有可以用来显示某些三维曲面(如球面.锥面和其他形体)的函数.然而,所有这些函数比本章中介绍的基本图元应用得更多