Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex Flex项目中的空气阶段3D_Apache Flex_Actionscript_Air_Stage3d - Fatal编程技术网

Apache flex Flex项目中的空气阶段3D

Apache flex Flex项目中的空气阶段3D,apache-flex,actionscript,air,stage3d,Apache Flex,Actionscript,Air,Stage3d,我有一个Flex4.5AIR项目,我想创建一个使用stage3D的组件。 我可以设法让三角形示例在FlashPlayer的Actionscript项目中工作,但我也不能让它在干净的Flex项目中工作。它进入渲染循环,但不可见: 主要mxml: <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="lib

我有一个Flex4.5AIR项目,我想创建一个使用stage3D的组件。 我可以设法让三角形示例在FlashPlayer的Actionscript项目中工作,但我也不能让它在干净的Flex项目中工作。它进入渲染循环,但不可见:

主要mxml:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark"  creationComplete="application1_initializeHandler(event)"
           xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
<fx:Script>
    <![CDATA[
        import mx.events.FlexEvent;

        protected function application1_initializeHandler(event:FlexEvent):void
        {
            addEventListener(Event.ADDED_TO_STAGE, init)

        }

        protected function init(e:Event=null):void {
            addElement(new triangle1(stage))
        }

    ]]>
</fx:Script>

三角形.as: 包裹 { 导入com.adobe.utils.AGALMiniAssembler

import flash.display.Sprite;
import flash.display.Stage;
import flash.display3D.Context3D;
import flash.display3D.Context3DProgramType;
import flash.display3D.Context3DVertexBufferFormat;
import flash.display3D.IndexBuffer3D;
import flash.display3D.Program3D;
import flash.display3D.VertexBuffer3D;
import flash.events.Event;
import flash.geom.Matrix3D;
import flash.geom.Rectangle;
import flash.geom.Vector3D;
import flash.utils.getTimer;

import mx.core.UIComponent;

public class triangle1 extends UIComponent
{
    protected var context3D:Context3D;
    protected var program:Program3D;
    protected var vertexbuffer:VertexBuffer3D;
    protected var indexbuffer:IndexBuffer3D;

    public function triangle1(stage:Stage)
    {           
        super();
        stage.stage3Ds[0].addEventListener( Event.CONTEXT3D_CREATE, initMolehill );
        stage.stage3Ds[0].requestContext3D();

        addEventListener(Event.ENTER_FRAME, onRender);

    }

    protected function initMolehill(e:Event):void
    {
        context3D = stage.stage3Ds[0].context3D;            
        context3D.configureBackBuffer(800, 600, 1, true);

        var vertices:Vector.<Number> = Vector.<Number>([
            -0.3,-0.3,0, 1, 0, 0, // x, y, z, r, g, b
            -0.3, 0.3, 0, 0, 1, 0,
            0.3, 0.3, 0, 0, 0, 1]);

        // Create VertexBuffer3D. 3 vertices, of 6 Numbers each
        vertexbuffer = context3D.createVertexBuffer(3, 6);
        // Upload VertexBuffer3D to GPU. Offset 0, 3 vertices
        vertexbuffer.uploadFromVector(vertices, 0, 3);              

        var indices:Vector.<uint> = Vector.<uint>([0, 1, 2]);

        // Create IndexBuffer3D. Total of 3 indices. 1 triangle of 3 vertices
        indexbuffer = context3D.createIndexBuffer(3);           
        // Upload IndexBuffer3D to GPU. Offset 0, count 3
        indexbuffer.uploadFromVector (indices, 0, 3);           

        var vertexShaderAssembler : AGALMiniAssembler = new AGALMiniAssembler();
        vertexShaderAssembler.assemble( Context3DProgramType.VERTEX,
            "m44 op, va0, vc0\n" + // pos to clipspace
            "mov v0, va1" // copy color
        );          

        var fragmentShaderAssembler : AGALMiniAssembler= new AGALMiniAssembler();
        fragmentShaderAssembler.assemble( Context3DProgramType.FRAGMENT,

            "mov oc, v0"
        );

        program = context3D.createProgram();
        program.upload( vertexShaderAssembler.agalcode, fragmentShaderAssembler.agalcode);
    }   

    protected function onRender(e:Event):void
    {
        if ( !context3D ) 
            return;

        context3D.clear ( 1, 1, 1, 1 );

        // vertex position to attribute register 0
        context3D.setVertexBufferAt (0, vertexbuffer, 0, Context3DVertexBufferFormat.FLOAT_3);
        // color to attribute register 1
        context3D.setVertexBufferAt(1, vertexbuffer, 3, Context3DVertexBufferFormat.FLOAT_3);
        // assign shader program
        context3D.setProgram(program);

        var m:Matrix3D = new Matrix3D();
        m.appendRotation(getTimer()/40, Vector3D.Z_AXIS);
        context3D.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX, 0, m, true);

        context3D.drawTriangles(indexbuffer);

        context3D.present();            
    }
}
}
导入flash.display.Sprite;
导入flash.display.Stage;
导入flash.display3D.Context3D;
导入flash.display3D.Context3DProgramType;
导入flash.display3D.Context3DVertexBufferFormat;
导入flash.display3D.IndexBuffer3D;
导入flash.display3D.Program3D;
导入flash.display3D.VertexBuffer3D;
导入flash.events.Event;
导入flash.geom.Matrix3D;
导入flash.geom.Rectangle;
导入flash.geom.Vector3D;
导入flash.utils.getTimer;
导入mx.core.ui组件;
公共类triangle1扩展UIComponent
{
受保护的var context3D:context3D;
受保护的var程序:Program3D;
受保护的var vertexbuffer:VertexBuffer3D;
受保护的var indexbuffer:IndexBuffer3D;
公共功能三角形1(阶段:阶段)
{           
超级();
stage.stage3Ds[0].addEventListener(Event.CONTEXT3D_CREATE,initMolehill);
stage.stage3Ds[0].requestContext3D();
addEventListener(Event.ENTER_FRAME,onRender);
}
受保护函数初始化(e:事件):无效
{
context3D=stage.stage3Ds[0].context3D;
configureBackBuffer(800600,1,true);
变量顶点:向量。=向量([
-0.3,-0.3,0,1,0,0,//x,y,z,r,g,b
-0.3, 0.3, 0, 0, 1, 0,
0.3, 0.3, 0, 0, 0, 1]);
//创建VertexBuffer3D.3个顶点,每个顶点有6个数字
vertexbuffer=context3D.createVertexBuffer(3,6);
//将VertexBuffer3D上载到GPU。偏移0,3个顶点
vertexbuffer.uploadFromVector(顶点,0,3);
var指数:向量=向量([0,1,2]);
//创建IndexBuffer3D。共3个索引。3个顶点的1个三角形
indexbuffer=context3D.createIndexBuffer(3);
//将IndexBuffer3D上载到GPU。偏移量0,计数3
indexbuffer.uploadFromVector(索引,0,3);
var vertexShaderAssembler:AGALMiniAssembler=新的AGALMiniAssembler();
vertexShaderAssembler.assemble(Context3DProgramType.VERTEX,
“m44 op,va0,vc0\n”+//pos到剪辑空间
“mov v0,va1”//复制颜色
);          
var fragmentShaderAssembler:AGALMiniAssembler=new AGALMiniAssembler();
fragmentShaderAssembler.assemble(context3dprogrammype.FRAGMENT,
“mov oc,v0”
);
program=context3D.createProgram();
程序上传(vertexShaderAssembler.agalcode,fragmentShaderAssembler.agalcode);
}   
受保护的函数onRender(e:事件):void
{
如果(!context3D)
返回;
context3D.clear(1,1,1,1);
//属性寄存器0的顶点位置
context3D.setVertexBufferAt(0,vertexbuffer,0,Context3DVertexBufferFormat.FLOAT_3);
//属性寄存器1的颜色
setVertexBufferAt(1,vertexbuffer,3,Context3DVertexBufferFormat.FLOAT_3);
//指定着色器程序
context3D.setProgram(program);
var m:Matrix3D=新的Matrix3D();
m、 附加旋转(getTimer()/40,Vector3D.Z_轴);
context3D.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX,0,m,true);
context3D.Draw三角形(indexbuffer);
context3D.present();
}
}
}

有什么想法吗?没有错误,并且跟踪onRender,因此它不可见..:S

对于mx:Container中的Stage3D来说是个好主意,这样我就不必担心背景为Alpha 0的mx:Application了。。可能吗?多谢各位

 <s:Application ....  backgroundAlpha="0"
我将PaperVision 3D改进为第3D阶段。。。因为它比Away3D快很多