i am using an application similar to render monkey to experiment with glsl and now i am trying to port it to irrlicht but i am having some trouble porting the script
so here is the full thing in hope someone can help me or if find this usefull for anything or anyone:
vertex shader:
Code: Select all
uniform float Pointsize;
void main(void)
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
vec4 mod = gl_ModelViewMatrix * gl_Vertex;
gl_PointSize = 2 *Pointsize/ -mod.z ;
}
Code: Select all
uniform sampler2D Colormap;
void main(void){
vec4 C = texture2D(Colormap,gl_PointCoord);
gl_FragColor = C * 0.7 ;
}
Code: Select all
#include <irrlicht.h>
using namespace irr;
float Pointsize=480;
int main()
{
IrrlichtDevice* device = createDevice(
video::EDT_OPENGL,
core::dimension2d<s32>(640, 480), 32, false, false, false, 0);
video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* smgr = device->getSceneManager();
video::IGPUProgrammingServices *services = driver->getGPUProgrammingServices();
s32 customMaterial = services->addHighLevelShaderMaterialFromFiles(
"shaders/shader_v.glsl", "main", video::EVST_VS_1_1,
"shaders/shader_f.glsl", "main", video::EPST_PS_1_1,
0,
video::EMT_TRANSPARENT_ADD_COLOR);
video::SMaterial Colormap;
Colormap.setTexture(0,
driver->getTexture("../../media/portal1.bmp"));
Colormap.Lighting = false;
scene::ISceneNode * node = smgr->addSphereSceneNode();
if (node)
{
node->setPosition(core::vector3df(0,10,-10));
node->getMaterial(0) = Colormap;
node->setMaterialFlag(video::EMF_LIGHTING, false);
node->setMaterialType(video::EMT_TRANSPARENT_ADD_COLOR);
}
scene::ICameraSceneNode* camera = smgr->addCameraSceneNodeFPS(0, 50, 10);
camera->setPosition(core::vector3df(0,10,-10));
camera->setTarget(core::vector3df(6,0,0));
while(device->run())
{
driver->beginScene(true, true, video::SColor(255,100,101,140));
smgr->drawAll();
driver->endScene();
}
device->drop();
return 0;
}
Code: Select all
shader = gl.Shader(Vertexshader,Fragmentshader);
shader.Uniformi("Colormap",0);
shader.Uniform("Pointsize",World.getCamHeight());
tan = shader.Loc("Tangent");
function render(){
Colormap.Bind(0);
gl.Rotate(60 * World.getTime(), 0,1,0);
gl.Rotate(60 * World.getTime(), 1,0,0);
shader.Bind();
Sphere.Vertex.Bind();
gl.Disable(gl.DEPTH_TEST);
gl.Enable(gl.BLEND);
gl.BlendFunc(gl.SRC_ALPHA,gl.ONE);
Sphere.Draw(gl.POINT_SPRITE);
gl.Disable(gl.BLEND);
gl.Enable(gl.DEPTH_TEST);
Sphere.Vertex.Unbind();
shader.Unbind();
}
function resizeEvent(w,h){
shader.Uniform("Pointsize",World.getCamHeight());
}
