首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Stage3D函数

Stage3D函数
EN

Stack Overflow用户
提问于 2014-03-18 02:09:11
回答 1查看 169关注 0票数 0

我一直在学习stage3D,并且第一次尝试渲染一些东西。在这个程序过程中没有出现任何运行时错误,但是我没有看到任何输出.我的代码如下(必要时附带注释)

代码语言:javascript
复制
import flash.events.Event;
import flash.display.*;
import flash.display3D.*;
import flash.display3D.textures.Texture;
import stillicidium.rendering.MeshMaker;
import stillicidium.rendering.AGALMiniAssembler;

stage.scaleMode = 'noBorder';

var context0:Context3D;
var vBuff:VertexBuffer3D;
var iBuff:IndexBuffer3D;
var tex:Texture;

//MeshMaker is designed to make a stage-fitted n-by-n mesh with
//corresponding uv coords - form is like: (x, y, 0 ,u, v)
var mm:MeshMaker = new MeshMaker(this.stage, 20);
var vBuff_vec:Vector.<Number> = mm.GetVertexBuffer();
var iBuff_vec:Vector.<uint> = mm.GetIndexBuffer();
mm = null;

var vShader:AGALMiniAssembler = new AGALMiniAssembler();
var pShader:AGALMiniAssembler = new AGALMiniAssembler();
var program:Program3D;

//Create a shape for drawing
var square:Shape = new Shape();
square.graphics.lineStyle(3,0xffffff,1,true);
square.graphics.beginFill(0xaa00ff,1);
square.graphics.moveTo(100,100);
square.graphics.lineTo(stage.stageWidth-100,100);
square.graphics.lineTo(stage.stageWidth-100,stage.stageHeight-100);
square.graphics.lineTo(100,stage.stageHeight-100);
square.graphics.lineTo(100,100);

//Draw shape as BitmapData to use as texture
var bmpdata:BitmapData = new BitmapData(stage.stageWidth,stage.stageHeight,true,0);
bmpdata.draw(square);

//Initialize stage3D
stage.stage3Ds[0].addEventListener(Event.CONTEXT3D_CREATE, initStage3D);
stage.stage3Ds[0].requestContext3D();

function initStage3D(e:Event):void {
    context0 = stage.stage3Ds[0].context3D;
    context0.configureBackBuffer(stage.stageWidth, stage.stageHeight, 4, true);

    vBuff = context0.createVertexBuffer(0.2 * vBuff_vec.length, 5);
    vBuff.uploadFromVector(vBuff_vec, 0, 0.2 * vBuff_vec.length);
    vBuff_vec = null;

    iBuff = context0.createIndexBuffer(iBuff_vec.length);
    iBuff.uploadFromVector(iBuff_vec, 0, iBuff_vec.length);
    iBuff_vec = null;

    tex = context0.createTexture(bmpdata.width,bmpdata.height,'bgra',false);
    tex.uploadFromBitmapData(bmpdata,0);

    //Passes vertex buffer 1 to fragment shader
    //Outputs vertex buffer 0
    vShader.assemble('vertex', 'mov v0 va1 \n'+'mov op va0');
    //Textures using data from vertex shader and sends to temporary register
    //Outputs temporary register
    pShader.assemble('fragment', 'tex ft0 v0 fs0 <2d,linear,nomip> \n'+'mov oc ft0');

    program = context0.createProgram();
    program.upload(vShader.agalcode, pShader.agalcode);

    addEventListener(Event.ENTER_FRAME, render);
}

function render(e:Event):void {
    if (!context0) { return; }
    context0.clear();

    //(x,y,0) to vertex buffer 0, (u,v) to vertex buffer 1
    context0.setVertexBufferAt(0, vBuff, 0, 'float3');
    context0.setVertexBufferAt(1, vBuff, 3, 'float2');
    context0.setTextureAt(0, tex);
    context0.setProgram(program);

    context0.drawTriangles(iBuff);
    context0.present();
}

我将此与几个在线例子进行了比较,但没有发现任何差异。我在想可能有什么设置我忽略了,或者要求我错过了.不过我迷路了。有什么想法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-18 03:15:16

网格大小不正确--我读过的教程中没有提到用作顶点着色器输出的x、y和z值介于-1和1之间。猜测是:我的网格位于正在呈现的区域之外,所有多边形都在视图被裁剪的渲染阶段丢失。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22469133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档