1

With stage 3d I set up a basic triangle, and I can use append rotation and append scale and everything works, but using append translation on the z axis, the triangle will dissapear with the translation being 1 or higher. With other shapes it would dissapear with only 3 or higher. And it doesn't look like the triangle is getting any smaller/farther away between 0 and 0.9 translation. The translation on the x and y axis do work though.

Here are my shader codes:

private static const VERTEX_SHADER_SOURCE:String = "m44 op, va0, vc1";
private static const FRAGMENT_SHADER_SOURCE:String = "mov oc, fc0";

my render loop:

addEventListener(Event.ENTER_FRAME, enter);
var t:Number=0;
function enter():void {
    context3D.clear();
    context3D.setProgram(program);

    var m:Matrix3D = new Matrix3D;

    m.appendTranslation(0, 0, t);

    t+=0.01;

    context3D.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX, 1, m, true);
    context3D.setVertexBufferAt(0, buffer, 0, Context3DVertexBufferFormat.FLOAT_3);
    context3D.setProgramConstantsFromVector(Context3DProgramType.FRAGMENT, 0, color);

    context3D.drawTriangles(indexBuffer);
    context3D.present();
}

my full code:

var assembler:AGALMiniAssembler = new AGALMiniAssembler();
assembler.assemble(Context3DProgramType.VERTEX, VERTEX_SHADER_SOURCE);

if (assembler.error) {
    trace("vertex shader error " +assembler.error); 
    return; 
}
var vertexShaderByteCode:ByteArray = assembler.agalcode;
assembler.assemble(Context3DProgramType.FRAGMENT, FRAGMENT_SHADER_SOURCE);

if (assembler.error) {
    trace("fragment shader error " + assembler.error); 
    return; 
}
var fragmentShaderByteCode:ByteArray = assembler.agalcode;
var program:Program3D = context3D.createProgram();

try {
    program.upload(vertexShaderByteCode, fragmentShaderByteCode); 
}
catch (err:Error) {
    trace("couldnt upload shader program" + err); 
    return; 
}

color = new <Number>[0.9296875, 0.9140625, 0.84765625, 1];
var verts:Vector.<Number> = Vector.<Number>([
    0.5, 0, 0,
    -0.5, 0, 0,
    0, 0.5, 0
]);

var buffer:VertexBuffer3D = context3D.createVertexBuffer(3, 3);
buffer.uploadFromVector(verts, 0, 3);

var indices:Vector.<uint> = Vector.<uint>([0, 1, 2])
var indexBuffer:IndexBuffer3D = context3D.createIndexBuffer(3);

indexBuffer.uploadFromVector(indices, 0, 3);    
addEventListener(Event.ENTER_FRAME, enter);
var t:Number=0;

function enter():void {

    context3D.clear();
    context3D.setProgram(program);
    var m:Matrix3D = new Matrix3D;

    m.appendTranslation(0, 0, t);
    t+=0.01;

    context3D.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX, 1, m, true);
    context3D.setVertexBufferAt(0, buffer, 0, Context3DVertexBufferFormat.FLOAT_3);
    context3D.setProgramConstantsFromVector(Context3DProgramType.FRAGMENT, 0, color);

    context3D.drawTriangles(indexBuffer);
    context3D.present();
}
Brian
  • 3,850
  • 3
  • 21
  • 37
mellow m
  • 39
  • 6
  • Just wondering, why do you work with **Stage3D** directly rather than use any available framework? – Organis Feb 26 '19 at 15:39
  • 1
    i like to learn how to do stuff myself i guess. maybe i should use something else? im doing this for 3d and would only use something free. – mellow m Feb 26 '19 at 18:04
  • This: https://gamua.com/starling/ – Organis Feb 26 '19 at 18:29
  • Or, if you need not only GPU but are actually into 3D, then this http://away3d.com/features/ or this https://github.com/AlternativaPlatform/Alternativa3D – Organis Feb 26 '19 at 18:33
  • thank you, i started using away3d – mellow m Feb 27 '19 at 12:39
  • Out of interest... Does the problem go away if you don't create a **new** variable every FPS (via `enterFrame`). You declared `var t:Number` outside of some `enterFrame` event, so why not same outside for `var m:Matrix3D`? – VC.One Mar 03 '19 at 18:15

0 Answers0