Paket | flash.display3D |
Sınıf | public final class Context3D |
Miras Alma | Context3D EventDispatcher Object |
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
Oluşturma bağlamı, bir çizim yüzeyi ve bunun ilişkili kaynakları ile durumunu içerir. Mümkün olduğunda oluşturma bağlamı, donanım grafik işleme birimini (GPU) kullanır. Aksi halde, oluşturma bağlamı yazılımı kullanır. (Context3D üzerinden oluşturma bir platformda desteklenmiyorsa, Stage nesnesinin stage3Ds
özelliği boş bir liste içerir.)
(Context3D oluşturma bağlamı, OpenGL ES 2'ye son derece benzeyen programlanabilir bir hattır, ancak bir dizi donanım ve GPU arabirimiyle uyumlu olması için soyutlanmıştır. 3B grafikler için tasarlanmasına karşın, oluşturma hattı, oluşturmanın üç boyutlu olmasını zorunlu kılmaz. Bu nedenle, uygun köşe ve piksel parça programlarını sağlayarak bir 2B oluşturucu yaratabilirsiniz. Hem 3B hem de 2B vakalarında, desteklenen tek geometrik temel üçgendir.
Bir Stage3D nesnesinin requestContext3D()
yöntemini çağırarak, Context3D sınıfının bir örneğini alın. Stage.stage3Ds
listesindeki her Stage3D öğesi için bir adet olacak şekilde, sahne alanı başına sınırlı sayıda Context3D nesnesi bulunabilir. Bağlam oluşturulduğunda, Stage3D nesnesi bir context3DCreate
olayı gönderir. Oluşturma bağlamı, GPU'yu kullanan başka bir uygulamanın odağı elde etmesi durumu gibi herhangi bir zamanda yok edilebilir ve yeniden oluşturulabilir. Kodunuz çoklu context3DCreate
olayı alınmasını beklemelidir. İlişkili Stage3D örneğinin x
ve y
özelliklerini kullanarak oluşturma alanını sahne alanına yerleştirin.
Bir sahneyi oluşturmak ve görüntülemek için (bir Context3D nesnesi aldıktan sonra), aşağıdaki adımlar tipik niteliktedir:
-
configureBackBuffer()
öğesini çağırarak ana ekran önbellek niteliklerini yapılandırın. - Aşağıdakileri de içeren oluşturma kaynaklarınızı oluşturun ve başlatın:
- Sahne geometrisini tanımlayan köşe ve dizin arabellekleri
- Sahneyi oluşturmak için köşe ve piksel programları (gölgelendiriciler)
- Dokular
- Bir kare oluşturun:
- Oluşturma durumunu, sahnedeki bir nesne veya nesne koleksiyonu için uygun şekilde ayarlayın.
- Bir üçgen kümesi oluşturmak için
drawTriangles()
yöntemini çağırın. - Sonraki nesne grubu için oluşturma durumunu değiştirin.
- Nesneleri tanımlayan üçgenleri çizmek için
drawTriangles()
öğesini çağırın. - Sahne tamamen oluşturulana kadar tekrarlayın.
- Sahne alanında oluşturulan sahneyi görüntülemek için
present()
yöntemini çağırın.
Oluşturma üzerinde aşağıdaki sınırlar geçerlidir:
Kaynak sınırları:
Kaynak | İzin verilen sayı | Toplam bellek |
---|---|---|
Vertex buffers
| 4096 | 256 MB |
Index buffers
| 4096 | 128 MB |
Programs
| 4096 | 16 MB |
Textures
| 4096 | 128 MB |
Cube textures
| 4096 | 256 MB |
AGAL sınırları: Program başına 200 işlem kodu.
Çağrı sınırlarını çizin: Her present()
çağrısı için 32.768 drawTriangles()
çağrısı.
Dokular için aşağıdaki sınırlar geçerlidir:
AIR 32 bit için doku limitleri:
Doku | Maksimum boyut | Toplam GPU belleği |
---|---|---|
Normal Doku (genişletilmiş Satır Taban Çizgisinin altında)
| 2048 x 2048 | 512 MB |
Normal Doku (genişletilmiş Satır Taban Çizgisi ve üzeri)
| 4096 x 4096 | 512 MB |
Dikdörtgen Doku (genişletilmiş Satır Taban Çizgisinin altında)
| 2048 x 2048 | 512 MB |
Dikdörtgen Doku (genişletilmiş Satır Taban Çizgisi ve üzeri)
| 4096 x 4096 | 512 MB |
Küp Doku
| 1024 x 1024 | 256 MB |
AIR 64 bit için doku limitleri (masaüstü):
Doku | Maksimum boyut | Toplam GPU belleği |
---|---|---|
Normal Doku (genişletilmiş Satır Taban Çizgisinin altında)
| 2048 x 2048 | 512 MB |
Normal Doku (Genişletilmiş Satır Taban Çizgisi ile Standart arası)
| 4096 x 4096 | 512 MB |
Normal Doku (genişletilmiş Standart ve üzeri)
| 4096 x 4096 | 2048 MB |
Dikdörtgen Doku (genişletilmiş Satır Taban Çizgisinin altında)
| 2048 x 2048 | 512 MB |
Dikdörtgen Doku (Genişletilmiş Satır Taban Çizgisi ile Standart arası)
| 4096 x 4096 | 512 MB |
Dikdörtgen Doku (Genişletilmiş Standart ve üzeri)
| 4096 x 4096 | 2048 MB |
Küp Doku
| 1024 x 1024 | 256 MB |
512 MB dokular için mutlak sınırdır. Bu sınır, mipmap'ler için gereken doku belleklerini de kapsar. Ancak, Küp Dokular için bellek sınırı 256 MB'dir.
Context3D yapıcısı ile Context3D nesnesi oluşturamazsınız. Stage3D örneğinin bir özelliği olarak oluşturulur ve kullanılabilir. Context3D sınıfı hem Flash Player hem de AIR'de çalıştırılırken masaüstü ve mobil platformlarda kullanılabilir.
İlgili API Öğeleri
Context3DClearMask
Context3DCompareMode
Context3DProgramType
Context3DRenderMode
Context3DStencilAction
Context3DTextureFormat
Context3DTriangleFace
Context3DVertexBufferFormat
flash.display3D.textures.Texture
flash.display3D.textures.CubeTexture
IndexBuffer3D
flash.geom.Matrix3D
Program3D
flash.display.Stage3D
VertexBuffer3D
Özellik | Tanımlayan: | ||
---|---|---|---|
backBufferHeight : int [salt okunur]
configureBackBuffer() yöntemine yönelik başarılı bir çağrıyla değiştirilebilecek geri arabelleğin yüksekliğini belirtir. | Context3D | ||
backBufferWidth : int [salt okunur]
configureBackBuffer() yöntemine yönelik başarılı bir çağrıyla değiştirilebilecek geri arabelleğin genişliğini belirtir. | Context3D | ||
constructor : Object
Belirli bir nesne örneği için sınıf nesnesine veya yapıcı işlevine bir başvuru. | Object | ||
driverInfo : String [salt okunur]
Söz konusu oluşturma bağlamı tarafından kullanılan grafik kitaplığı sürücüsünün türü. | Context3D | ||
enableErrorChecking : Boolean
Oluşturucu tarafından karşılaşılan hataların uygulamaya bildirilip bildirilmeyeceğini belirtir. | Context3D | ||
maxBackBufferHeight : int
Geri arabelleğin en büyük yüksekliğini belirtir. | Context3D | ||
maxBackBufferWidth : int
Geri arabelleğin en büyük genişliğini belirtir. | Context3D | ||
profile : String [salt okunur]
Bu Context3D nesnesi tarafından kullanılan özellik desteği profili. | Context3D | ||
supportsVideoTexture : Boolean [statik] [salt okunur]
Context3D'nin video dokusunu destekleyip desteklemediğini belirtir. | Context3D | ||
totalGPUMemory : Number [salt okunur]
Bir uygulamanın Stage 3D veri yapıları tarafından ayrılan toplam GPU belleğini döndürür. Her GPU kaynak nesnesi oluşturulduğunda, kullanılan bellek Context3D'de depolanır. | Context3D |
Yöntem | Tanımlayan: | ||
---|---|---|---|
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
EventDispatcher nesnesi olan bir olay dinleyici nesnesini, dinleyicinin bir olayın bildirimini alması için kaydeder. | EventDispatcher | ||
clear(red:Number = 0.0, green:Number = 0.0, blue:Number = 0.0, alpha:Number = 1.0, depth:Number = 1.0, stencil:uint = 0, mask:uint = 0xffffffff):void
Bu Context3D nesnesiyle ilişkili renk, derinlik ve şablon arabelleklerini temizler ve bunları belirtilen değerlerle doldurur. | Context3D | ||
configureBackBuffer(width:int, height:int, antiAlias:int, enableDepthAndStencil:Boolean = true, wantsBestResolution:Boolean = false, wantsBestResolutionOnBrowserZoom:Boolean = false):void
Görünüm penceresi boyutunu ve oluşturma arabelleğinin diğer niteliklerini ayarlar. | Context3D | ||
createCubeTexture(size:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:CubeTexture
CubeTexture nesnesi oluşturur. | Context3D | ||
Bir IndexBuffer3D nesnesi oluşturur. | Context3D | ||
Bir Program3D nesnesi oluşturur. | Context3D | ||
createRectangleTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean):flash.display3D.textures:RectangleTexture
Rectangle Texture nesnesi oluşturur. | Context3D | ||
createTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:Texture
Texture nesnesi oluşturur. | Context3D | ||
createVertexBuffer(numVertices:int, data32PerVertex:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
VertexBuffer3D nesnesi oluşturur. | Context3D | ||
createVertexBufferForInstances(numVertices:int, data32PerVertex:int, instancesPerElement:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Örnek verileri için bir VertexBuffer3D nesnesi oluşturur. | Context3D | ||
Bir VideoTexture nesnesi oluşturur. | Context3D | ||
Olay akışına bir olay gönderir. | EventDispatcher | ||
Bu Context3D ile ilişkili tüm kaynakları ve dahili depolama alanını boşaltır. | Context3D | ||
Geçerli oluşturma arabelleğini bir bitmap'e çizer. | Context3D | ||
Belirtilen üçgenleri, geçerli arabellekleri ve bu Context3D nesnesinin durumunu kullanarak oluşturun. | Context3D | ||
drawTrianglesInstanced(indexBuffer:IndexBuffer3D, numInstances:int, firstIndex:int = 0, numTriangles:int = -1):void
Belirtilen örnek üçgenleri, geçerli arabellekleri ve bu Context3D nesnesinin durumunu kullanarak oluşturun. | Context3D | ||
EventDispatcher nesnesinin belirli bir olay türü için kayıtlı dinleyicisi olup olmadığını kontrol eder. | EventDispatcher | ||
Bir nesnenin belirli bir özelliğinin tanımlı olup olmadığını gösterir. | Object | ||
Object sınıfının bir örneğinin parametre olarak belirtilen nesnenin prototip zincirinde olup olmadığını gösterir. | Object | ||
Geri oluşturma arabelleğini görüntüler. | Context3D | ||
Belirtilen özelliğin bulunup bulunmadığını ve numaralandırılabilir olup olmadığını gösterir. | Object | ||
EventDispatcher nesnesinden bir dinleyiciyi kaldırır. | EventDispatcher | ||
Mevcut renkle yapılan bir çizim işleminin çıktı rengini karıştırmada kullanılan faktörleri belirler. | Context3D | ||
Oluşturma arabelleğine renk yazarken kullanılan maskeyi ayarlar. | Context3D | ||
Üçgen ayırma modunu ayarlar. | Context3D | ||
Derinlik testi için kullanılan karşılaştırma türünü ayarlar. | Context3D | ||
Oluşturma için kullanılan dolgu modunu ayarlayın. | Context3D | ||
Sonraki oluşturmada kullanmak üzere köşe ve parça programlarını ayarlar. | Context3D | ||
setProgramConstantsFromByteArray(programType:String, firstRegister:int, numRegisters:int, data:ByteArray, byteArrayOffset:uint):void
Gölgelendirici programlar tarafından kullanılması için ByteArray öğesinde saklanan değerleri kullanarak sabitler ayarlar. | Context3D | ||
setProgramConstantsFromMatrix(programType:String, firstRegister:int, matrix:Matrix3D, transposedMatrix:Boolean = false):void
Bir Matrix3D öğesinde saklanan değerleri kullanarak sabitleri gölgelendirici programları tarafından kullanılmak üzere ayarlayın. | Context3D | ||
setProgramConstantsFromVector(programType:String, firstRegister:int, data:Vector.<Number>, numRegisters:int = -1):void
Gölgelendirici programları için sabit girdilerini ayarlar. | Context3D | ||
Dinamik bir özelliğin döngü işlemlerinde kullanılabilirliğini ayarlar. | Object | ||
Geri oluşturma arabelleğini, oluşturma hedefi olarak ayarlar. | Context3D | ||
setRenderToTexture(texture:flash.display3D.textures:TextureBase, enableDepthAndStencil:Boolean = false, antiAlias:int = 0, surfaceSelector:int = 0, colorOutputIndex:int = 0):void
Belirtilen dokuyu oluşturma hedefi olarak ayarlar. | Context3D | ||
Doku örnekleyici durumunu manuel olarak geçersiz kılın. | Context3D | ||
Çizim maskesinin türü olan bir makas dikdörtgeni ayarlar. | Context3D | ||
setStencilActions(triangleFace:String = "frontAndBack", compareMode:String = "always", actionOnBothPass:String = "keep", actionOnDepthFail:String = "keep", actionOnDepthPassStencilFail:String = "keep"):void
Şablon modunu ve işlemi ayarlar. | Context3D | ||
Şablon testleri için kullanılan şablon karşılaştırma değerini ayarlar. | Context3D | ||
Parça programının doku girdisi kaydı olarak kullanılacak dokuyu belirtir. | Context3D | ||
setVertexBufferAt(index:int, buffer:VertexBuffer3D, bufferOffset:int = 0, format:String = "float4"):void
Tek bir köşe gölgelendirici programına ait bir girdiye hangi veri bileşenlerinin karşılık geldiğini belirtir. | Context3D | ||
Bu nesnenin, yerel ayara özel kurallara göre biçimlendirilmiş dize temsilini döndürür. | Object | ||
Belirtilen nesnenin dize olarak temsil edilen halini döndürür. | Object | ||
Belirtilen nesnenin temel değerini döndürür. | Object | ||
Bir olay dinleyicisinin bu EventDispatcher nesnesiyle mi, yoksa onun belirtilen olay türüne yönelik üst öğelerinden biriyle mi kayıtlı olduğunu kontrol eder. | EventDispatcher |
backBufferHeight | özellik |
backBufferHeight:int
[salt okunur] Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 15, AIR 15 |
configureBackBuffer()
yöntemine yönelik başarılı bir çağrıyla değiştirilebilecek geri arabelleğin yüksekliğini belirtir. wantsBestResolutionOnBrowserZoom
ayarı son configureBackBuffer()
yöntemi çağrısında true
olarak belirlenirse tarayıcı yakınlaştırma faktörü değiştiğinde yükseklik değiştirilebilir. Yükseklik değişikliği, tarayıcı yakınlaştırma değişikliği olayı için bir olay dinleyicisi kaydedilerek algılanabilir.
Uygulama
public function get backBufferHeight():int
İlgili API Öğeleri
backBufferWidth | özellik |
backBufferWidth:int
[salt okunur] Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 15, AIR 15 |
configureBackBuffer()
yöntemine yönelik başarılı bir çağrıyla değiştirilebilecek geri arabelleğin genişliğini belirtir. wantsBestResolutionOnBrowserZoom
ayarı son configureBackBuffer()
yöntemi çağrısında true
olarak belirlenirse tarayıcı yakınlaştırma faktörü değiştiğinde genişlik değiştirilebilir. Genişlik değişikliği, tarayıcı yakınlaştırma değişikliği olayı için bir olay dinleyicisi kaydedilerek algılanabilir.
Uygulama
public function get backBufferWidth():int
İlgili API Öğeleri
driverInfo | özellik |
driverInfo:String
[salt okunur] Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
Söz konusu oluşturma bağlamı tarafından kullanılan grafik kitaplığı sürücüsünün türü. Oluşturmanın yazılım, DirectX sürücüsü veya OpenGL sürücüsü kullanıp kullanmadığını gösterir. Ayrıca donanım oluşturmanın başarısız olup olmadığını gösterir. Donanım oluşturma başarısız olursa, Flash Player Stage3D için yazılımla oluşturmayı kullanır ve driverInfo
aşağıdaki değerlerden birini içerir:
- "Software Hw_disabled=userDisabled" - Adobe Flash Player Ayarları Kullanıcı Arabirimindeki Donanım hızlandırmayı etkinleştir onay kutusu seçili değildir.
- "Software Hw_disabled=oldDriver" - Donanım grafik sürücüsüyle ilgili bilinen sorunlar vardır. Grafik sürücüsünü güncellemek bu sorunu çözebilir.
- "Software Hw_disabled=unavailable" - Donanım grafik sürücüsüyle ilgili bilinen sorunlar veya donanım grafikleri başlatma hatası.
- "Software Hw_disabled=explicit" - İçerik requestContext3D aracılığıyla açıkça yazılımla oluşturmayı talep etti.
- "Software Hw_disabled=domainMemory" - İçerik, Stage3D donanım oluşturması ile kullanıldığında lisans gerektiren domainMemory öğesini kullanır. adobe.com/go/fpl_tr adresini ziyaret edin.
Uygulama
public function get driverInfo():String
enableErrorChecking | özellik |
enableErrorChecking:Boolean
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
Oluşturucu tarafından karşılaşılan hataların uygulamaya bildirilip bildirilmeyeceğini belirtir.
enableErrorChecking
öğesi true
olduğunda, clear()
ve drawTriangles()
yöntemleri eşzamanlıdır ve hata gönderebilir. enableErrorChecking
öğesi false
olduğunda, varsayılan, clear()
ve drawTriangles()
yöntemleri eşzamansızdır ve hatalar bildirilmez. Hata denetimini etkinleştirmek, oluşturma performansını düşürür. Hata denetimini yalnızca hata ayıklama sırasında etkinleştirmelisiniz.
Uygulama
public function get enableErrorChecking():Boolean
public function set enableErrorChecking(value:Boolean):void
İlgili API Öğeleri
maxBackBufferHeight | özellik |
maxBackBufferHeight:int
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 15, AIR 15 |
Geri arabelleğin en büyük yüksekliğini belirtir. Başlangıç değeri platformdaki sistem sınırıdır. Özellik sistem sınırına eşit veya daha küçük olan, ancak daha büyük olmayan bir değere ayarlanabilir. Özellik en düşük sınıra eşit veya daha büyük olan, ancak daha küçük olmayan bir değere ayarlanabilir. Geri arabellek yapılandırılmadığında en düşük sınır 32 sabit değeridir. En düşük sınır, geri arabellek yapılandırıldıktan sonra son başarılı configureBackBuffer()
yöntemi çağrısındaki yükseklik parametresinin değeridir.
Uygulama
public function get maxBackBufferHeight():int
public function set maxBackBufferHeight(value:int):void
maxBackBufferWidth | özellik |
maxBackBufferWidth:int
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 15, AIR 15 |
Geri arabelleğin en büyük genişliğini belirtir. Başlangıç değeri platformdaki sistem sınırıdır. Özellik sistem sınırına eşit veya daha küçük olan, ancak daha büyük olmayan bir değere ayarlanabilir. Özellik en düşük sınıra eşit veya daha büyük olan, ancak daha küçük olmayan bir değere ayarlanabilir. Geri arabellek yapılandırılmadığında en düşük sınır 32 sabit değeridir. En düşük sınır, geri arabellek yapılandırıldıktan sonra son başarılı configureBackBuffer()
yöntemi çağrısındaki genişlik parametresinin değeridir.
Uygulama
public function get maxBackBufferWidth():int
public function set maxBackBufferWidth(value:int):void
profile | özellik |
supportsVideoTexture | özellik |
totalGPUMemory | özellik |
totalGPUMemory:Number
[salt okunur] Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 21, AIR 21 |
Bir uygulamanın Stage3D veri yapıları tarafından ayrılan toplam GPU belleğini döndürür.
Her GPU kaynak nesnesi oluşturulduğunda, kullanılan bellek Context3D'de depolanır. Bu bellek dizin arabelleklerini, köşe arabelleklerini, dokuları (video dokusu hariç) ve bu Context3D ile oluşturulan programları içerir.
API totalGPUMemory
, yukarıdaki kaynaklar tarafından kullanılan toplam belleği kullanıcıya döndürür. Döndürülen varsayılan değer 0'dır. Toplam GPU belleği bayt olarak döndürülür. Bilgiler mobil üzerinde yalnızca Doğrudan modda, masaüstünde ise Doğrudan ve GPU modlarında sağlanır. (Masaüstünde, <renderMode>gpu</renderMode>
kullanma <renderMode>direct</renderMode>
olarak döner.)
Uygulama
public function get totalGPUMemory():Number
clear | () | yöntem |
public function clear(red:Number = 0.0, green:Number = 0.0, blue:Number = 0.0, alpha:Number = 1.0, depth:Number = 1.0, stencil:uint = 0, mask:uint = 0xffffffff):void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
Bu Context3D nesnesiyle ilişkili renk, derinlik ve şablon arabelleklerini temizler ve bunları belirtilen değerlerle doldurur.
Temizlenecek arabellekleri belirtmek için mask
parametresini ayarlayın. mask
parametresini ayarlamak için Context3DClearMask sınıfında tanımlanan sabitleri kullanın. Maskeye çoklu arabellek eklemek için "|" bitsel OR operatörünü kullanın (veya Context3DClearMask.ALL
öğesini kullanın). Geri arabellekte oluştururken herhangi bir clear()
çağrısından önce configureBackBuffer()
yöntemi çağrılmalıdır.
Not: İzin verilen aralığın dışında bir parametre değeri belirtirseniz, Sayısal parametre değerleri sessizce sıfır ila bir aralığına kelepçelenir. Aynı şekilde stencil
, 0xff değerinden büyükse, 0xff değerine ayarlanır.
Parametreler
red:Number (default = 0.0 ) — Renk arabelleğini temizlemek için kullanılacak rengin kırmızı bileşeni, sıfır ila bir aralığında.
| |
green:Number (default = 0.0 ) — Renk arabelleğini temizlemek için kullanılacak rengin yeşil bileşeni, sıfır ila bir aralığında.
| |
blue:Number (default = 0.0 ) — Renk arabelleğini temizlemek için kullanılacak rengin mavi bileşeni, sıfır ila bir aralığında.
| |
alpha:Number (default = 1.0 ) — Renk arabelleğini temizlemek için kullanılacak rengin alfa bileşeni, sıfır ila bir aralığında. Alfa bileşen karıştırma için kullanılmaz. Arabellek alfasına doğrudan yazılır.
| |
depth:Number (default = 1.0 ) — Derinlik arabelleğini temizlemek için kullanılacak değer, sıfır ile bir aralığında.
| |
stencil:uint (default = 0 ) — Şablon arabelleğini temizlemek için kullanılacak 8-bit değer, 0x00 ila 0xff aralığında.
| |
mask:uint (default = 0xffffffff ) — temizlenecek arabellekleri belirtir.
|
Atar
Error — Nesne Atıldı: Bu Context3D nesnesi dispose() çağrısıyla mı yoksa temel oluşturma donanımı kaybolduğu için mi atıldı?
| |
Error — 3768: Stage3D API, arka planda çalışma sırasında kullanılmayabilir.
|
İlgili API Öğeleri
configureBackBuffer | () | yöntem |
public function configureBackBuffer(width:int, height:int, antiAlias:int, enableDepthAndStencil:Boolean = true, wantsBestResolution:Boolean = false, wantsBestResolutionOnBrowserZoom:Boolean = false):void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
Görünüm penceresi boyutunu ve oluşturma arabelleğinin diğer niteliklerini ayarlar.
Oluşturma işlemi çift arabelleklidir. present()
yöntemi çağrıldığında geri arabellek, görünür ön arabellekle değiştirilir. Arabelleğin en küçük boyutu 32x32 pikseldir. Geri ara belleğin en büyük boyutu cihaz özellikleriyle sınırlıdır ve ayrıca kullanıcı tarafından maxBackBufferWidth
ve maxBackBufferHeight
özellikleriyle ayarlanabilir. Arabelleği yapılandırma yavaş bir işlemdir. Normal oluşturma işlemleri sırasında arabellek boyutunu veya niteliklerini değiştirmemeye çalışın.
Parametreler
width:int — piksel cinsinden arabelleğin genişliği.
| |||||||||
height:int — piksel cinsinden arabelleğin yüksekliği.
| |||||||||
antiAlias:int — istenen kenar yumuşatma özelliğini belirten bir tam sayı değeri. Değer, kenar yumuşatma sırasında kullanılan alt örneklerin sayısıyla ilişkilidir. Göreli performans etkisi özel oluşturma donanımına bağlı olsa da daha fazla alt örneğin kullanılması, daha fazla hesaplama gerçekleştirilmesini gerektirir. Kenar yumuşatma türü ve kenar yumuşatma özelliğinin uygulanıp uygulanmayacağı aygıta ve oluşturma moduna bağlıdır. Kenar yumuşatma özelliği yazılım oluşturma bağlamı tarafından hiçbir şekilde desteklenmez.
| |||||||||
enableDepthAndStencil:Boolean (default = true ) — false değeri derinlik veya şablon arabelleği oluşturulmadığını belirtir; true değeri derinlik ve şablon arabelleği oluşturur. SWF sürümü 15 veya üstü ile derlenen bir AIR 3.2 ya da daha yeni uygulama için, uygulama tanımlayıcısı dosyasındaki renderMode öğesi direct ise, uygulama tanımlayıcısı dosyasındaki depthAndStencil öğesi de bu argüman ile aynı değere sahip olmalıdır. Varsayılan olarak, depthAndStencil öğesinin değeri false şeklindedir.
| |||||||||
wantsBestResolution:Boolean (default = false ) — true , aygıt HiDPI ekranlarını destekliyorsa onun, genişlik ve yükseklik parametreleriyle belirtilen daha geniş bir geri arabelleği ayırmaya çalışacağını belirtir. Bu, daha fazla piksel eklediğinden ve gölgelendirici işlemlerinin sonucunu potansiyel olarak değiştirdiğinden varsayılan olarak kapalıdır. Yerel geri arabelleğin ne kadar ölçeklendiği belirlemek için Stage.contentsScaleFactor öğesini kullanın.
| |||||||||
wantsBestResolutionOnBrowserZoom:Boolean (default = false ) — true geri arabellek boyutunun tarayıcı yakınlaştırma faktöründeki artış oranında artması gerektiğini belirtir. Bu değerin ayarı birden çok tarayıcı yakınlaştırmasında aynıdır. Parametrenin varsayılan değeri false şeklindedir. Geri arabellek boyutu artışını sınırlandırmak için maxBackBufferWidth ve maxBackBufferHeight özelliklerini ayarlayın. Geri arabelleğin geçerli boyutunu belirlemek için backBufferWidth ve backBufferHeight özelliklerini kullanın.
|
Atar
Error — Nesne Atıldı: Bu Context3D nesnesi dispose() çağrısıyla mı yoksa temel oluşturma donanımı kaybolduğu için mi atıldı?
| |
Error — Hatalı Giriş Boyutu: Genişlik veya yükseklik parametresi izin verilen en küçük geri ara bellek boyutundan küçüktür veya izin verilen en büyük geri ara bellek boyutundan büyüktür.
| |
Error — 3709: Uygulama tanımlayıcısındaki depthAndStencil bayrağı, Context3D nesnesinde configureBackBuffer() öğesine iletilen enableDepthAndStencil Boolean değeri ile eşleşmelidir.
|
createCubeTexture | () | yöntem |
public function createCubeTexture(size:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:CubeTexture
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
CubeTexture nesnesi oluşturur.
Oluşturma bağlamına küp dokusu bitmap'leri yüklemek ve oluşturma sırasında bir küp dokusuna başvurmak için bir CubeTexture nesnesi kullanın. Bir küp dokusu, kübik bir topolojide düzenlenmiş altı eşit boyutlu kare dokusundan oluşur ve ortam eşlemlerini açıklamak için kullanışlıdır.
CubeTexture yapıcısı ile CubeTexture nesnesi oluşturamazsınız. Bunun yerine bu yöntemi kullanın. Bir CubeTexture nesnesi oluşturduktan sonra CubeTexture uploadFromBitmapData()
, uploadFromByteArray()
veya uploadCompressedTextureFromByteArray()
yöntemlerini kullanarak doku bitmap verilerini yükleyin.
Parametreler
size:int — Texel cinsinden doku kenarı uzunluğu.
| |
format:String — Context3DTextureFormat numaralandırılmış listesinin texel biçimi.
Doku sıkıştırma, doku görüntülerini doğrudan GPU üzerinde sıkıştırılmış biçimde saklamanıza izin verir. Bu, GPU belleğinden ve bellek bant genişliğinden tasarruf edilmesini sağlar. Normalde, sıkıştırılan dokular çevrimdışı olarak sıkıştırılır ve Texture.uploadCompressedTextureFromByteArray yönteminin kullanımıyla GPU'ya sıkıştırılmış formda yüklenir. Masaüstü platformlardaki Flash Player 11.4 ve AIR 3.4 çalışma zamanı doku sıkıştırması için destek eklemiştir. Bu, vektör resminden dinamik dokular oluşturma durumları gibi belirli durumlarda faydalı olabilir. Bu özelliğin henüz mobil platformlarda kullanılabilir olmadığını ve bunun yerine ArgumentError (Doku Formatı Uyuşmazlığı) gönderileceğini unutmayın. Çalışma zamanı doku sıkıştırmasını kullanmak için aşağıdaki adımları uygulayın: 1. Context3D.createCubeTexture() yöntemini çağırıp format parametresi olarak flash.display3D.Context3DTextureFormat.COMPRESSED veya flash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA öğesini ileterek doku nesnesini oluşturun. 2. createCubeTexture() tarafından döndürülen flash.display3D.textures.Texture örneğini kullanarak, dokuyu tek bir adımda yüklemek ve sıkıştırmak üzere flash.display3D.textures.CubeTexture.uploadFromBitmapData() veya flash.display3D.textures.CubeTexture.uploadFromByteArray() öğesini çağırın. | |
optimizeForRenderToTexture:Boolean — Dokunun bir oluşturma hedefi olarak kullanılma ihtimali varsa true olarak ayarlanır.
| |
streamingLevels:int (default = 0 ) — Görüntü oluşturulmadan önce yüklenmesi gereken MIP map düzeyi. Doku akışı önce en küçük mip düzeylerini yükleme ve görüntüleme, dokular yüklendikçe ise aşamalı bir şekilde daha yüksek kaliteli görüntüleri gösterme özelliğini sunar. Son kullanıcılar daha yüksek kaliteli görüntüler yüklenirken düşük kaliteli görüntüleri uygulamada görüntüleyebilir.
Varsayılan olarak streamingLevels 0'dır. Bu, MIP eşlemindeki en yüksek kaliteli görüntünün, görüntü oluşturmadan önce yüklenmiş olması gerektiği anlamına gelir. Bu parametre Flash Player 11.3 ve AIR 3.3'te eklenmiştir. Varsayılan değeri kullanmak Flash Player ve AIR'nin önceki sürümlerinin davranışını korur. Doku akışını etkinleştirmek için Not: Bu özelliği > 0 olan bir değere ayarlamanız bellek kullanımını ve performansı etkileyebilir. |
flash.display3D.textures:CubeTexture |
Atar
Error — Nesne Atıldı: Bu Context3D nesnesi dispose() çağrısıyla mı yoksa temel oluşturma donanımı kaybolduğu için mi atıldı?
| |
Error — Kaynak Sınırı Aşıldı: çok fazla Texture nesnesi oluşturulduysa veya dokulara ayrılan bellek miktarı aşıldıysa.
| |
ArgumentError — Derinlik Dokusu Başlatılamadı: derinlik dokusu oluşturma girişiminde bulunursanız.
| |
ArgumentError — Doku Boyutu Sıfır: size parametresi sıfırdan daha büyük değilse.
| |
ArgumentError — Doku İkinin Kuvveti Değil: size parametresi ikinin kuvveti değilse.
| |
ArgumentError — Doku Çok Büyük: size parametresi 1024'den daha büyükse.
| |
Error — Doku Oluşturulamadı: CubeTexture nesnesi, oluşturma bağlamı tarafından oluşturulamadıysa (ancak nedenle ilgili ek bilgi mevcut değildir).
| |
ArgumentError — Geçersiz akış düzeyi: streamingLevels log2(size) değerinden yüksekse veya bu değerdeyse.
|
İlgili API Öğeleri
createIndexBuffer | () | yöntem |
public function createIndexBuffer(numIndices:int, bufferUsage:String = "staticDraw"):IndexBuffer3D
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
Bir IndexBuffer3D nesnesi oluşturur.
Oluşturma bağlamına bir dizi üçgen dizini yüklemek ve oluşturma için bu dizin dizisine başvurmak üzere bir IndexBuffer3D nesnesi kullanın. Dizin arabelleğindeki her dizin, bir köşe arabelleğinde karşılık gelen bir köşeye başvurur. Üç dizinin her bir dizisi bir üçgeni tanımlar. Dizin arabelleğinde tanımlanan bir veya daha fazla üçgeni oluşturmak için IndexBuffer3D nesnesini drawTriangles()
yöntemine geçirin.
IndexBuffer3D sınıfı yapıcısı kullanarak IndexBuffer3D nesnesi oluşturamazsınız. Bunun yerine bu yöntemi kullanın. Bir IndexBuffer3D nesnesi oluşturduktan sonra, IndexBuffer3D uploadFromVector()
veya uploadFromByteArray()
yöntemlerini kullanarak dizinleri indirin.
Parametreler
numIndices:int — arabelleğe kaydedilecek köşe noktası sayısı.
| |
bufferUsage:String (default = "staticDraw ") — Beklenen arabellek kullanımı. Context3DBufferUsage içinde tanımlanan sabitlerden birini kullanın. Donanım sürücüsü, düzgün ayarladığınızda uygun optimizasyonu gerçekleştirebilir. Bu parametre yalnızca Flash 12/AIR 4'ten sonra kullanılabilir.
|
IndexBuffer3D |
Atar
Error — Nesne Atıldı: Bu Context3D nesnesi dispose() çağrısıyla mı yoksa temel oluşturma donanımı kaybolduğu için mi atıldı?
| |
Error — Kaynak Sınırı Aşıldı: çok fazla dizin arabelleği oluşturulduysa veya dizin arabelleklerine ayrılan bellek miktarı aşıldıysa.
| |
Error — 3768: Stage3D API, arka planda çalışma sırasında kullanılmayabilir.
| |
ArgumentError — Ara Bellek Çok Büyük: numIndices 0xf0000 değerine eşit veya daha büyük olduğunda.
|
İlgili API Öğeleri
createProgram | () | yöntem |
public function createProgram():Program3D
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
Bir Program3D nesnesi oluşturur.
Oluşturma bağlamına gölgelendirici programları yüklemek ve oluşturma sırasında yüklenen programlara başvurmak üzere Program3D nesnesini kullanın. Bir Program3D nesnesi, bir köşe programı ve bir parça programı (piksel programı olarak da bilinir) olmak üzere iki programı saklar. Programlar ikili gölgelendirici grubu dilinde yazılmıştır.
Program3D yapıcısı kullanarak Program3D nesnesi oluşturamazsınız. Bunun yerine bu yöntemi kullanın. Program3D nesnesi oluşturduktan sonra programları Program3D upload()
yöntemini kullanarak yükleyin.
Program3D |
Atar
Error — Nesne Atıldı: Bu Context3D nesnesi dispose() çağrısıyla mı yoksa temel oluşturma donanımı kaybolduğu için mi atıldı?
| |
Error — Program sayısı 4096'yı aşarsa veya toplam bellek boyutu 16 MB'ı aşarsa (Program3D kaynaklarını boşaltmak için dispose öğesini kullanın).
|
İlgili API Öğeleri
Örnek ( Bu örnek nasıl kullanılır? )
renderContext
nesnesinin, bir Context3D sınıfı örneği olduğunu unutmayın. Örnekteki programlar Adobe Grafikleri Çevirici Dili'nde (AGAL) yazılmıştır.
//A simple vertex program in AGAL const VERTEX_SHADER:String = "m44 op, va0, vc0 \n" + "mov v0, va1"; //A simple fragment (or pixel) program in AGAL const FRAGMENT_SHADER:String = "mov oc, v0"; var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); var programPair:Program3D; //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair );
createRectangleTexture | () | yöntem |
public function createRectangleTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean):flash.display3D.textures:RectangleTexture
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11.8, AIR 3.8 |
Rectangle Texture nesnesi oluşturur.
Oluşturma bağlamına doku bitmap'leri yüklemek ve oluşturma sırasında bir dokuya başvurmak üzere bir RectangleTexture nesnesi kullanın.
RectangleTexture yapıcı ile RectangleTexture nesneleri oluşturamayacağınızdan, bu yöntemi kullanın. Bir RectangleTexture nesnesi oluşturduktan sonra uploadFromBitmapData()
veya uploadFromByteArray()
yöntemlerini kullanarak doku bitmap'lerini yükleyin.
32 bit tam sayı dokularının Flash BitmapData
biçimiyle eşleşmesi için paketlenmiş BGRA biçiminde saklandığını unutmayın. Kayan nokta dokuları geleneksel bir RGBA biçimini kullanır.
Rectangle dokularının normal 2B dokulardan farkı, genişliklerinin ve yüksekliklerinin ikinin kuvveti olmak zorunda olmamasıdır. Ayrıca mip map de içermezler. Bunlar en çok doku oluşturma durumlarında kullanışlıdır. Rectangle texture, mip eşleme filtreleme veya tekrar sarma kullanan bir örnekleyici ile birlikte kullanılıyorsa, drawTriangles çağrısı başarısız olur. Rectangle dokusu aynı zamanda akışa da izin vermez. Yalnızca şu doku biçimleri Rectangle dokular tarafından desteklenir: BGRA, BGR_PACKED, BGRA_PACKED. Sıkıştırılmış doku biçimleri Rectangle Dokuları tarafından desteklenmez.
Parametreler
width:int — Texel cinsinden doku genişliği.
| |
height:int — Texel cinsinden doku yüksekliği.
| |
format:String — Context3DTextureFormat numaralandırılmış listesinin texel biçimi.
| |
optimizeForRenderToTexture:Boolean — Dokunun bir oluşturma hedefi olarak kullanılma ihtimali varsa true olarak ayarlanır.
|
flash.display3D.textures:RectangleTexture |
Atar
Error — Nesne Atıldı: Bu Context3D nesnesi dispose() çağrısıyla mı yoksa temel oluşturma donanımı kaybolduğu için mi atıldı?
| |
Error — Kaynak Sınırı Aşıldı: çok fazla Texture nesnesi oluşturulduysa veya dokulara ayrılan bellek miktarı aşıldıysa.
| |
ArgumentError — Doku Boyutu Sıfır: hem width hem de height parametresi sıfırdan daha büyük değilse.
| |
ArgumentError — Doku Çok Büyük: width veya height parametresi 2048'den daha büyükse.
| |
Error — Doku Oluşturulamadı: Texture nesnesi oluşturma bağlamı tarafından oluşturulamadıysa (ancak nedenle ilgili ek bilgi mevcut değildir).
| |
Error — Taban Çizgisi veya Üzeri Profil Gerektirir: dikdörtgen doku taban çizgisiyle sınırlandırılmış profille oluşturulursa.
|
İlgili API Öğeleri
createTexture | () | yöntem |
public function createTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:Texture
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
Texture nesnesi oluşturur.
Oluşturma bağlamına doku bitmap'leri yüklemek ve oluşturma sırasında bir dokuya başvurmak üzere bir Texture nesnesi kullanın.
Texture yapıcısı ile Texture nesnesi oluşturamazsınız. Bunun yerine bu yöntemi kullanın. Bir Texture nesnesi oluşturduktan sonra Texture uploadFromBitmapData()
, uploadFromByteArray()
veya uploadCompressedTextureFromByteArray()
yöntemlerini kullanarak doku bitmap'lerini yükleyin.
32 bit tam sayı dokularının Flash BitmapData
biçimiyle eşleşmesi için paketlenmiş BGRA biçiminde saklandığını unutmayın. Kayan nokta dokuları geleneksel bir RGBA biçimini kullanır.
Parametreler
width:int — Texel cinsinden doku genişliği.
| |
height:int — Texel cinsinden doku yüksekliği.
| |
format:String — Context3DTextureFormat numaralandırılmış listesinin texel biçimi.
Doku sıkıştırma, doku görüntülerini doğrudan GPU üzerinde sıkıştırılmış biçimde saklamanıza izin verir. Bu, GPU belleğinden ve bellek bant genişliğinden tasarruf edilmesini sağlar. Normalde, sıkıştırılan dokular çevrimdışı olarak sıkıştırılır ve Texture.uploadCompressedTextureFromByteArray yönteminin kullanımıyla GPU'ya sıkıştırılmış formda yüklenir. Masaüstü platformlardaki Flash Player 11.4 ve AIR 3.4 çalışma zamanı doku sıkıştırması için destek eklemiştir. Bu, vektör resminden dinamik dokular oluşturma durumları gibi belirli durumlarda faydalı olabilir. Bu özelliğin henüz mobil platformlarda kullanılabilir olmadığını ve bunun yerine ArgumentError (Doku Formatı Uyuşmazlığı) gönderileceğini unutmayın. Çalışma zamanı doku sıkıştırmasını kullanmak için aşağıdaki adımları uygulayın: 1. Context3D.createTexture() yöntemini çağırıp format parametresi olarak flash.display3D.Context3DTextureFormat.COMPRESSED veya flash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA öğesini ileterek doku nesnesini oluşturun. 2. createTexture() tarafından döndürülen flash.display3D.textures.Texture örneğini kullanarak, dokuyu tek bir adımda yüklemek ve sıkıştırmak üzere flash.display3D.textures.Texture.uploadFromBitmapData() veya flash.display3D.textures.Texture.uploadFromByteArray() öğesini çağırın. | |
optimizeForRenderToTexture:Boolean — Dokunun bir oluşturma hedefi olarak kullanılma ihtimali varsa true olarak ayarlanır.
| |
streamingLevels:int (default = 0 ) — Görüntü oluşturulmadan önce yüklenmesi gereken MIP map düzeyi. Doku akışı önce en küçük mip düzeylerini yükleme ve görüntüleme, dokular yüklendikçe ise aşamalı bir şekilde daha yüksek kaliteli görüntüleri gösterme özelliğini sunar. Son kullanıcılar daha yüksek kaliteli görüntüler yüklenirken düşük kaliteli görüntüleri uygulamada görüntüleyebilir.
Varsayılan olarak streamingLevels 0'dır. Bu, MIP eşlemindeki en yüksek kaliteli görüntünün, görüntü oluşturmadan önce yüklenmiş olması gerektiği anlamına gelir. Bu parametre Flash Player 11.3 ve AIR 3.3'te eklenmiştir. Varsayılan değeri kullanmak Flash Player ve AIR'nin önceki sürümlerinin davranışını korur. Doku akışını etkinleştirmek için Not: Bu özelliği > 0 olan bir değere ayarlamanız bellek kullanımını ve performansı etkileyebilir. |
flash.display3D.textures:Texture |
Atar
Error — Nesne Atıldı: Bu Context3D nesnesi dispose() çağrısıyla mı yoksa temel oluşturma donanımı kaybolduğu için mi atıldı?
| |
Error — Kaynak Sınırı Aşıldı: çok fazla Texture nesnesi oluşturulduysa veya dokulara ayrılan bellek miktarı aşıldıysa.
| |
ArgumentError — Derinlik Dokusu Başlatılamadı: derinlik dokusu oluşturma girişiminde bulunursanız.
| |
ArgumentError — Doku Boyutu Sıfır: hem width hem de height parametresi sıfırdan daha büyük değilse.
| |
ArgumentError — Doku İkinin Kuvveti Değil: hem width hem de height parametresi ikinin kuvveti değilse.
| |
ArgumentError — Doku Çok Büyük: width veya height parametresi taban çizgisi ve taban çizgisiyle sınırlı profil için 2048'den daha büyükse ya da width veya height parametresi genişletilmiş profil taban çizgisi ve üzeri için 4096'dan büyükse.
| |
Error — Doku Oluşturulamadı: Texture nesnesi oluşturma bağlamı tarafından oluşturulamadıysa (ancak nedenle ilgili ek bilgi mevcut değildir).
| |
ArgumentError — Geçersiz akış düzeyi: streamingLevels , log2(min(width,height)) değerinden yüksekse veya bu değere sahipse.
|
İlgili API Öğeleri
createVertexBuffer | () | yöntem |
public function createVertexBuffer(numVertices:int, data32PerVertex:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
VertexBuffer3D nesnesi oluşturur.
Oluşturma bağlamına bir dizi köşe verisi yüklemek için bir VertexBuffer3D nesnesi kullanın. Köşe arabelleği, sahne alanı geometrisindeki her noktayı oluşturmak için gereken verileri içerir. Her köşeyle ilişkili veri nitelikleri genel olarak; konum, renk ve doku koordinatlarını içerir ve köşe gölgelendiricisi programına ait bir girdi işlevi görür. setVertexBufferAt()
yöntemini kullanarak, köşe programının girdilerinden birine karşılık gelen veri değerlerini tanımlayın. Her köşe için en fazla altmış dört tane 32 bitlik değer belirtebilirsiniz.
VertexBuffer3D yapıcısı kullanarak VertexBuffer3D nesnesi oluşturamazsınız. Bunun yerine bu yöntemi kullanın. Bir VertexBuffer3D nesnesi oluşturduktan sonra, VertexBuffer3D uploadFromVector()
veya uploadFromByteArray()
yöntemlerini kullanarak dizinleri indirin.
Parametreler
numVertices:int — arabelleğe kaydedilecek köşe noktası sayısı. Tek bir arabellekteki maksimum köşe noktası sayısı 65535'tir.
| |
data32PerVertex:int — Her köşe ile ilişkili 32 bitlik (4 bayt) veri değerlerinin sayısı. Köşe başına maksimum 32 bit veri sayısı 64'tür (veya 256 bayttır). Belirli bir zamanda bir köşe gölgelendirici programı tarafından yalnızca 8 nitelik kaydına erişilebileceğini unutmayın. Bir köşe arabelleği içinden nitelik seçmek için SetVertextBufferAt() öğesini kullanın.
| |
bufferUsage:String (default = "staticDraw ") — Beklenen arabellek kullanımı. Context3DBufferUsage içinde tanımlanan sabitlerden birini kullanın. Donanım sürücüsü, düzgün ayarladığınızda uygun optimizasyonu gerçekleştirebilir. Bu parametre yalnızca Flash 12/AIR 4'ten sonra kullanılabilir
|
VertexBuffer3D |
Atar
Error — Nesne Atıldı: Bu Context3D nesnesi dispose() çağrısıyla mı yoksa temel oluşturma donanımı kaybolduğu için mi atıldı?
| |
Error — Kaynak Sınırı Aşıldı: çok fazla köşe arabelleği nesnesi oluşturulduysa veya köşe arabelleklerine ayrılan bellek miktarı aşıldıysa.
| |
ArgumentError — Arabellek Çok Büyük: numVertices öğesi 0x10000 değerinden daha büyük olduğunda veya data32PerVertex öğesi 64'ten büyük olduğunda.
| |
ArgumentError — Arabellek Boyutu Sıfır: numVertices öğesi veya data32PerVertex öğesi sıfır olduğunda.
| |
ArgumentError — Doku Oluşturulamadı: VertexBuffer3D nesnesi oluşturma bağlamı tarafından oluşturulamadıysa (ancak nedenle ilgili ek bilgi mevcut değildir).
| |
Error — 3768: Stage3D API, arka planda çalışma sırasında kullanılmayabilir.
|
İlgili API Öğeleri
Örnek ( Bu örnek nasıl kullanılır? )
setVertexBufferAt()
yöntemini çağırır. Köşe programı, bu şekilde tanımlanan ve köşe nitelik kayıtları olarak da bilinen en fazla 8 girdi içerebilir.
const dataPerVertex:int = 6; var vertexData:Vector.<Number> = Vector.<Number>( [ // x, y, z r, g, b format 0, 0, 0, 1, 1, 1, -1, 1, 0, 0, 0,.5, 1, 1, 0, 0, 0, 1, 1,-1, 0, .5, 0, 0, -1,-1, 0, 1, 0, 0 ] ); var vertexes:VertexBuffer3D = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex ); vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex ); //Identify vertex data inputs for vertex program renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //Defines shader input va0 as the position data renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //Defines shader input va1 as the color data
createVertexBufferForInstances | () | yöntem |
public function createVertexBufferForInstances(numVertices:int, data32PerVertex:int, instancesPerElement:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | AIR 20.0 |
Örnek verileri için bir VertexBuffer3D nesnesi oluşturur.
Oluşturma bağlamına bir dizi örnek verisi yüklemek için bir VertexBuffer3D nesnesi kullanın. Köşe arabelleği, sahne alanı geometrisindeki her örneği oluşturmak için gereken verileri içerir. Örnek verileri içeren Köşe Arabellekleri bir örneğin tüm köşeleri için ortak olan nitelikler sağlar. ve köşe gölgelendiricisi programına ait girdi işlevini görür. setVertexBufferAt()
yöntemini kullanarak, köşe programının girdilerinden birine karşılık gelen veri değerlerini tanımlayın. Köşe arabelleğinin her öğesi için en fazla altmış dört tane 32 bitlik değer belirtebilirsiniz.
VertexBuffer3D yapıcısı kullanarak VertexBuffer3D nesnesi oluşturamazsınız. Bunun yerine bu yöntemi kullanın. Bir VertexBuffer3D nesnesi oluşturduktan sonra, VertexBuffer3D uploadFromVector()
veya uploadFromByteArray()
yöntemlerini kullanarak dizinleri indirin.
Parametreler
numVertices:int — arabelleğe kaydedilecek öğe sayısı. Tek bir arabellekteki maksimum öğe sayısı 65535'tir.
| |
data32PerVertex:int — her öğe ile ilişkili 32 bitlik (4 bayt) veri değerlerinin sayısı. Köşe başına maksimum 32 bit veri sayısı 64'tür (veya 256 bayttır).
| |
instancesPerElement:int — köşe arabelleğin bir öğesini kullanacak örnek sayısı.
| |
bufferUsage:String (default = "staticDraw ") — Beklenen arabellek kullanımı. Context3DBufferUsage içinde tanımlanan sabitlerden birini kullanın. Donanım sürücüsü, düzgün ayarladığınızda uygun optimizasyonu gerçekleştirebilir. Bu parametre yalnızca Flash 12/AIR 4'ten sonra kullanılabilir
|
VertexBuffer3D |
Atar
Error — Nesne Atıldı: Bu Context3D nesnesi dispose() çağrısıyla mı yoksa temel oluşturma donanımı kaybolduğu için mi atıldı?
| |
Error — Kaynak Sınırı Aşıldı: çok fazla köşe arabelleği nesnesi oluşturulduysa veya köşe arabelleklerine ayrılan bellek miktarı aşıldıysa.
| |
ArgumentError — Arabellek Çok Büyük: numVertices öğesi 0x10000 değerinden daha büyük olduğunda veya data32PerVertex öğesi 64'ten büyük olduğunda.
| |
ArgumentError — Arabellek Boyutu Sıfır: numVertices öğesi veya data32PerVertex öğesi sıfır olduğunda.
| |
ArgumentError — Doku Oluşturulamadı: VertexBuffer3D nesnesi oluşturma bağlamı tarafından oluşturulamadıysa (ancak nedenle ilgili ek bilgi mevcut değildir).
| |
Error — 3768: Stage3D API, arka planda çalışma sırasında kullanılmayabilir.
| |
Error — Standart Genişletilmiş Profil veya Üzerini gerektirir: istenen profil standart genişletilmiş profilden az olduğunda bu yöntem çağrılırsa.
| |
Error — Öğe Başına Geçersiz Örnek: instancesPerElement sıfırdan büyük değilse.
|
İlgili API Öğeleri
createVideoTexture | () | yöntem |
public function createVideoTexture():flash.display3D.textures:VideoTexture
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | AIR 17.0, Flash Player 18.0 |
Bir VideoTexture nesnesi oluşturur.
NetStream nesnesinden veya Camera nesnesinden doku olarak video kareleri almak ve video karelerini oluşturma bağlamına yüklemek için bir VideoTexture nesnesi kullanın.
VideoTexture nesnesi VideoTexture oluşturucu ile oluşturulamaz; bu yöntemi kullanın. Bir VideoTexture nesnesi oluşturmadan önce NetStream nesnesini veya Camera Nesnesini ekleyerek video karelerini VideoTexture attachNetStream()
veya attachCamera()
yöntemleriyle alın.
Sistem bu özelliği desteklemiyorsa bu yöntem null değerini döndürür.
VideoTexture mipmap içermez. VideoTexture mip eşleme filtreleme veya tekrar sarma kullanan bir örnekleyici ile birlikte kullanılıyorsa, drawTriangles çağrısı başarısız olur. VideoTexture, gölgelendiriciler tarafından BGRA dokusu olarak kabul edilebilir. Context3D yazılım oluşturma moduyla istenirse VideoTexture Nesnesinin örneğini oluşturma denemesi başarısız olur.
Bir Context3D örneği için en fazla 4 VideoTexture nesnesi kullanılabilir. Mobilde desteklenen VideoTexture nesnelerinin gerçek sayısı platform sınırlamaları nedeniyle 4'ten az olabilir.
Döndürürflash.display3D.textures:VideoTexture |
Atar
Error — Nesne Atıldı: Bu Context3D nesnesi dispose() çağrısıyla mı yoksa temel oluşturma donanımı kaybolduğu için mi atıldı?
| |
Error — Kaynak Sınırı Aşıldı: çok fazla Texture nesnesi oluşturulduysa veya dokulara ayrılan bellek miktarı aşıldıysa.
| |
Error — Doku Oluşturulamadı: Texture nesnesi oluşturma bağlamı tarafından oluşturulamadıysa (ancak nedenle ilgili ek bilgi mevcut değildir).
|
dispose | () | yöntem |
public function dispose(recreate:Boolean = true):void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
Bu Context3D ile ilişkili tüm kaynakları ve dahili depolama alanını boşaltır.
Tüm dizin arabellekleri, köşe arabellekleri, dokular ve Context3D aracılığıyla oluşturulan programlar, tıpkı her biri için tek tek dispose()
çağrısı yapmış gibi atılır. Ek olarak, Context3D öğesinin kendisi de tüm geçici arabellekleri ve geri arabelleği serbest bırakarak atılır. dispose() öğesini çağırdıktan sonra configureBackBuffer(), clear(), drawTriangles(), createCubeTexture(), createTexture(), createProgram(), createIndexBuffer(), createVertexBuffer() veya drawToBitmapData() öğesini çağırırsanız çalışma zamanı bir istisna atar.
Uyarı: İlişkili Stage3D nesnesi üzerinde Events.CONTEXT3D_CREATE kümesi için bir olay dinleyicisi varlığını sürdürürken Bir Context3D üzerinde dispose() öğesinin çağrılması, dispose() çağrısının aygıt kaybının benzetimini yapmasına neden olacaktır. Bu, Stage3D üzerinde yeni bir Context3D oluşturur ve Events.CONTEXT3D_CREATE olayını tekrar gönderir. Bunu istemiyorsanız, dispose() öğesini çağırmadan veya recreate parametresini false olarak ayarlamadan önce olay dinleyicisini Stage3D nesnesinden kaldırın.
Parametreler
recreate:Boolean (default = true )
|
İlgili API Öğeleri
flash.display.Stage3D
drawToBitmapData | () | yöntem |
public function drawToBitmapData(destination:BitmapData, srcRect:Rectangle = null, destPoint:Point = null):void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | AIR 3 |
Geçerli oluşturma arabelleğini bir bitmap'e çizer.
Geri oluşturma arabelleğinin o andaki içerikleri BitmapData nesnesine kopyalanır. Bu potansiyel olarak bir dakika kadar sürebilecek çok yavaş bir işlemdir. Dikkatli bir şekilde kullanın. Bu işlevin ön oluşturma arabelleğini (sahne alanında gösterilen) değil çizim yapılan arabelleği kopyaladığını unutmayın. Oluşturulan görüntüyü sahne alanında göründüğü anda yakalamak için present()
öğesini çağırmadan önce hemen drawToBitmapData()
öğesini çağırın.
AIR 25'ten itibaren drawToBitmapData()
API'sine iki yeni parametre getirilmiştir. Bu API artık üç parametre almaktadır. Birincisi var olan destination:BitmapData
parametresidir. İkinci parametre ise stage3D üzerindeki hedef dikdörtgen olan srcRect:Rectangle
parametresidir. Üçüncü parametre, hedef bitmap üzerindeki koordinat olan destPoint:Point
parametresidir. SrcRect ve destPoint parametreleri isteğe bağlıdır ve varsayılan değerleri sırasıyla (0,0,bitmapWidth,bitmapHeight) ve (0,0) şeklindedir.
Görüntü çizildiğinde, bitmap'e uyacak şekilde ölçeklenmez. Bunun yerine içerik hedef bitmap'in boyutlarına kırpılır.
Flash BitmapData nesneleri, alfa bileşeninin önceden çoğalttığı renkleri saklar. Örneğin, bir pikselin "saf" rgb renk bileşenleri (0x0A, 0x12, 0xBB) ve alfa bileşeni 0x7F (.5) şeklindeyse, piksel (0x05, 0x09, 0x5D, 0x7F) şeklindeki rgba değerleri ile BitmapData nesnesinde saklanır. Arabellekte oluşturulan renklerin alfa tarafından çoğaltılması veya parça gölgelendiricisindeki işlemi uygulamaları için karışım faktörlerini ayarlayabilirsiniz. Oluşturma bağlamı renklerin önceden çoğaltılan biçimde saklandığını doğrulamaz.
Parametreler
destination:BitmapData | |
srcRect:Rectangle (default = null )
| |
destPoint:Point (default = null )
|
Atar
Error — Nesne Atıldı: Bu Context3D nesnesi dispose() çağrısıyla mı yoksa temel oluşturma donanımı kaybolduğu için mi atıldı?
| |
Error — 3768: Stage3D API, arka planda çalışma sırasında kullanılmayabilir.
| |
Error — 3802: destPoint:Point veya srcRect:Rectangle parametrelerinden biri bitmap/stage3D koordinat sınırının dışındaysa veya Sayısal olmayan (NaN) değerler girdi olarak geçirilirse.
|
Örnek ( Bu örnek nasıl kullanılır? )
package { import com.adobe.utils.AGALMiniAssembler; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.display.Stage3D; import flash.display3D.Context3D; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DRenderMode; import flash.display3D.Context3DVertexBufferFormat; import flash.display3D.IndexBuffer3D; import flash.display3D.Program3D; import flash.display3D.VertexBuffer3D; import flash.events.Event; import flash.filters.DropShadowFilter; public class Context3D_drawToBitmapData extends Sprite { public const viewWidth:Number = 320; public const viewHeight:Number = 200; private var bitmap:Bitmap; private var stage3D:Stage3D; private var renderContext:Context3D; private var indexList:IndexBuffer3D; private var vertexes:VertexBuffer3D; private const VERTEX_SHADER:String = "mov op, va0 \n" + //copy position to output "mov v0, va1"; //copy color to varying variable v0 private const FRAGMENT_SHADER:String = "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var programPair:Program3D; public function Context3D_drawToBitmapData() { stage3D = this.stage.stage3Ds[0]; stage3D.x = 0; stage3D.y = 0; //Add event listener before requesting the context stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated ); stage3D.requestContext3D( Context3DRenderMode.AUTO ); //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); } //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process private function contextCreated( event:Event ):void { renderContext = Stage3D( event.target ).context3D; trace( "3D driver: " + renderContext.driverInfo ); renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing renderContext.configureBackBuffer( viewWidth, viewHeight, 2, false ); //Create vertex index list for the triangles var triangles:Vector.<uint> = Vector.<uint>( [ 0, 1, 2, 0, 3, 4 ] ); indexList = renderContext.createIndexBuffer( triangles.length ); indexList.uploadFromVector( triangles, 0, triangles.length ); //Create vertexes const dataPerVertex:int = 6; var vertexData:Vector.<Number> = Vector.<Number>( [ // x, y, z r, g, b format 0, 0, 0, 1, 1, 1, -1, 1, 0, 0, 0,.5, 1, 1, 0, 0, 0, 1, 1,-1, 0, .5, 0, 0, -1,-1, 0, 1, 0, 0 ] ); vertexes = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex ); vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex ); //Identify vertex data inputs for vertex program renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //va0 is position renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //va1 is color //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair ); //Clear required before first drawTriangles() call renderContext.clear( .3,.3,.3 ); //Draw the 2 triangles renderContext.drawTriangles( indexList, 0, 2 ); var renderedBitmapData:BitmapData = new BitmapData( viewWidth, viewHeight, true ); renderContext.drawToBitmapData( renderedBitmapData ); renderContext.present(); //Add to stage bitmap = new Bitmap( renderedBitmapData ); this.addChild( bitmap ); bitmap.x = 55; bitmap.y = 25; bitmap.filters = [new DropShadowFilter( 8, 235, .4 )]; } } }
drawTriangles | () | yöntem |
public function drawTriangles(indexBuffer:IndexBuffer3D, firstIndex:int = 0, numTriangles:int = -1):void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
Belirtilen üçgenleri, geçerli arabellekleri ve bu Context3D nesnesinin durumunu kullanarak oluşturun.
Her üçgen için, üçgen köşeleri köşe gölgelendirici programıyla işlenir ve üçgen yüzeyi piksel gölgelendirici programıyla işlenir. Her piksel için piksel programının çıktı rengi, şablon işlemlerine, derinlik testine, kaynak ve hedef alfa değerine ve geçerli karışım moduna bağlı olarak oluşturma hedefine çekilir. Oluşturma hedefi ana oluşturma arabelleği veya bir doku olabilir.
Ayırma etkinse (setCulling()
yöntemiyle) piksel programı çalıştırılmadan önce üçgenler sahneden atılabilir. Şablon ve derinlik testi etkinse, oluşturma hedefini güncellemeden piksel programının çıktı pikselleri atılabilir. Buna ek olarak, piksel programı, bir piksel için bir rengin çıktısını vermemeye karar verebilir.
Oluşturulan üçgenler, siz present()
yöntemini çağırmadan görünüm penceresinde görüntülenmez. Her present()
çağrısından sonra ve ilk drawTriangles()
çağrısından önce clear()
yönteminin çağırılması gerekir. Aksi takdirde oluşturma başarısız olur.
enableErrorChecking
öğesi false
olduğunda bu işlev anında döndürülür, sonuçları beklemez ve yalnızca bu Context3D örneği atılmışsa veya çok fazla çizim çağrısı varsa istisnalar atar. Oluşturma bağlamı durumu geçersizse, oluşturma sessizce başarısız olur. enableErrorChecking
özelliği true
değerine sahip olduğunda, bu işlev üçgenler çizildikten sonra döndürülür ve tüm çizim hataları ve geçersiz bağlam durumları için istisnalar atar.
Parametreler
indexBuffer:IndexBuffer3D — oluşturulacak köşe noktalarına başvuruda bulunan bir köşe dizini kümesi.
| |
firstIndex:int (default = 0 ) — oluşturulmak üzere seçilmiş ilk köşe dizininin dizini. Varsayılan 0.
| |
numTriangles:int (default = -1 ) — oluşturulacak üçgen sayısı. Her üçgen üç dizin kullanır. Dizin arabelleğindeki tüm üçgenleri çizmek için -1 değerini iletir. Varsayılan -1.
|
Atar
Error — Nesne Atıldı: Bu Context3D nesnesi dispose() çağrısıyla mı yoksa temel oluşturma donanımı kaybolduğu için mi atıldı?
| |
Error — Bu yöntemin present() öğesine yönelik çağrılar arasında çok fazla çağrılması durumunda. En fazla çağrı sayısı 32.768'dir.
Aşağıdaki hatalar yalnızca | |
Error — Çizimden Önce Temizlemek Gerekir: Arabellek son present() çağrısından beri temizlenmediyse.
| |
Error — Geçerli bir Program3D nesnesi ayarlanmadıysa.
| |
Error — Geçerli Dizin Arabelleği Ayarı Yok: Bir IndexBuffer3D nesnesi ayarlanmadıysa.
| |
Error — Parametrelerdeki Sağlamlık Denetimi Başarısız Oldu: Çizilecek üçgen sayısı veya firstIndex izin verilen değerleri aşarsa.
| |
RangeError — Bu Arabellekte Yeteri Kadar Dizin Yok: Dizinde çizilecek üçgenlerin sayısını tanımlayacak yeteri kadar dizin olmadığında.
| |
Error — Oluşturmaya Bağlı Örnek Bağlar Dokusu: Oluşturma hedefi bir doku olduğunda ve bu doku geçerli parça programının doku girdisine atandığında.
| |
Error — Örnek Bağlar Geçersiz Dokusu: Geçersiz bir doku, geçerli parça programının girdisi olarak belirtilir.
| |
Error — Örnekleyici Biçimi, Doku Biçimiyle Eşleşmiyor: Doku, geçerli parça programına girdi olarak atandığında ve örnekleyici kaydı için belirtilen biçimden farklı bir biçime sahip olduğunda. Örneğin, bir 2B dokusu küp dokusu örnekleyicisine atanır.
| |
Error — Örnek Bağlar Tanımlanmayan Dokusu: Geçerli parça programı ayarlanmayan (setTextureAt() kullanarak) bir doku kaydına erişiyor.
| |
Error — Aynı Doku İçin Aynı Parametreler Gereklidir: Bir doku birden fazla örnekleyici kaydı için kullanılıyorsa örnekleyicilerin tamamının ayarlarının aynı olması gerekir. Örneğin, bir örnekleyiciyi kelepçelemek bir diğerini de sarmak üzere ayarlayamazsınız.
| |
Error — Doku Bağlı Ancak Kullanılmıyor: Bir doku gölgelendirici bir girdi olarak belirlenmiş ancak kullanılmıyor.
| |
Error — Akış Kullanılmıyor: Bir köşe arabelleği, köşe niteliği girdisine atanır ancak köşe programı, karşılık gelen kayda başvurmaz.
| |
Error — Akış Geçersiz: Bir köşe programı girdisine atanan VertexBuffer3D nesnesi geçerli bir nesne değildir.
| |
RangeError — Akışta Yeteri Kadar Köşe Noktası Yok: Belirtilen üçgenleri çizmek için veri sağlayan bir köşe arabelleğinde yeterli miktarda veri yoktur.
| |
RangeError — Akış Köşesi Kenar Uzaklığı Sınırı Aştı: setVertexBufferAt() çağrısında belirtilen kenar uzaklığı negatiftir veya arabellek sınırını aşmıştır.
| |
Error — Akış Okunuyor Ancak Ayarlı Değil: Geçerli köşe programı tarafından kullanılan bir köşe niteliği ayarlanmamıştır (setVertexBufferAt() kullanarak).
|
İlgili API Öğeleri
VertexBuffer3D.upload()
IndexBuffer3D.upload()
flash.display3D.textures.Texture
Program3D
Örnek ( Bu örnek nasıl kullanılır? )
Üçgenler, köşe arabelleğini ve dizin arabelleğini kullanarak tanımlanır. Köşe arabelleği, her bir üçgen köşesi için konum ve renk bilgilerini içerir. Dizin arabelleği, köşe arabelleğine yönelik dizinler içerir. Üç dizin bir üçgeni tanımlar. Örneğin, köşe arabelleğindeki ilk üç noktadan oluşan bir üçgen, dizin arabelleğinde 0,1,2 olarak listelenir.
Bu basit örnekte, herhangi bir 3B dönüştürme işlemi gerçekleştirilmez. Yalnızca kurallı görüntüleme alanındaki (2x2x1 birim hacim) nesneler görüntülenebilir ve üçgenlerin koordinatlarının bu alan içinde olduğu tanımlanır. Ancak tipik bir 3B sahnesini oluştururken, oluşturulacak nesneleri "world" koordinat sisteminden bu görüntüleme alanına bir perspektif veya ortografik izdüşüm kullanarak yansıtırsınız.
package { import com.adobe.utils.AGALMiniAssembler; import flash.display.Sprite; import flash.display.Stage3D; import flash.display3D.Context3D; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DRenderMode; import flash.display3D.Context3DVertexBufferFormat; import flash.display3D.IndexBuffer3D; import flash.display3D.Program3D; import flash.display3D.VertexBuffer3D; import flash.events.Event; public class Context3D_drawTriangles extends Sprite { public const viewWidth:Number = 320; public const viewHeight:Number = 200; private var stage3D:Stage3D; private var renderContext:Context3D; private var indexList:IndexBuffer3D; private var vertexes:VertexBuffer3D; private const VERTEX_SHADER:String = "mov op, va0 \n" + //copy position to output "mov v0, va1"; //copy color to varying variable v0 private const FRAGMENT_SHADER:String = "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var programPair:Program3D; public function Context3D_drawTriangles() { stage3D = this.stage.stage3Ds[0]; stage3D.x = 10; stage3D.y = 10; //Add event listener before requesting the context stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated ); stage3D.requestContext3D( Context3DRenderMode.AUTO ); //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); } //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process private function contextCreated( event:Event ):void { renderContext = Stage3D( event.target ).context3D; trace( "3D driver: " + renderContext.driverInfo ); renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing renderContext.configureBackBuffer( viewWidth, viewHeight, 2, false ); //Create vertex index list for the triangles var triangles:Vector.<uint> = Vector.<uint>( [ 0, 1, 2, 0, 3, 4 ] ); indexList = renderContext.createIndexBuffer( triangles.length ); indexList.uploadFromVector( triangles, 0, triangles.length ); //Create vertexes const dataPerVertex:int = 6; var vertexData:Vector.<Number> = Vector.<Number>( [ // x, y, z r, g, b format 0, 0, 0, 1, 1, 1, -1, 1, 0, 0, 0,.5, 1, 1, 0, 0, 0, 1, 1,-1, 0, .5, 0, 0, -1,-1, 0, 1, 0, 0 ] ); vertexes = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex ); vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex ); //Identify vertex data inputs for vertex program renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //va0 is position renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //va1 is color //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair ); //Clear required before first drawTriangles() call renderContext.clear( .3,.3,.3 ); //Draw the 2 triangles renderContext.drawTriangles( indexList, 0, 2 ); //Show the frame renderContext.present(); } } }
drawTrianglesInstanced | () | yöntem |
public function drawTrianglesInstanced(indexBuffer:IndexBuffer3D, numInstances:int, firstIndex:int = 0, numTriangles:int = -1):void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | AIR 20.0 |
Belirtilen örnek üçgenleri, geçerli arabellekleri ve bu Context3D nesnesinin durumunu kullanarak oluşturun.
Her bir örneğin her üçgeni için, üçgen köşeleri köşe gölgelendirici programıyla işlenir ve üçgen yüzeyi piksel gölgelendirici programıyla işlenir. Her piksel için piksel programının çıktı rengi, şablon işlemlerine, derinlik testine, kaynak ve hedef alfa değerine ve geçerli karışım moduna bağlı olarak oluşturma hedefine çekilir. Oluşturma hedefi ana oluşturma arabelleği veya bir doku olabilir.
Ayırma etkinse (setCulling()
yöntemiyle) piksel programı çalıştırılmadan önce üçgenler sahneden atılabilir. Şablon ve derinlik testi etkinse, oluşturma hedefini güncellemeden piksel programının çıktı pikselleri atılabilir. Buna ek olarak, piksel programı, bir piksel için bir rengin çıktısını vermemeye karar verebilir.
Oluşturulan örnek üçgenler, siz present()
yöntemini çağırmadan görünüm penceresinde görüntülenmez. Her present()
çağrısından sonra ve ilk drawTrianglesInstanced()
çağrısından önce clear()
yönteminin çağrılması gerekir, aksi takdirde oluşturma başarısız olur.
enableErrorChecking
öğesi false
olduğunda bu işlev anında döndürülür, sonuçları beklemez ve yalnızca bu Context3D örneği atılmışsa veya çok fazla çizim çağrısı varsa istisnalar atar. Oluşturma bağlamı durumu geçersizse, oluşturma sessizce başarısız olur. enableErrorChecking
özelliği true
değerine sahip olduğunda, bu işlev üçgenler çizildikten sonra döndürülür ve tüm çizim hataları ve geçersiz bağlam durumları için istisnalar atar.
Örneği oluşturulan ara bellek SetVertexAt()
ile yanlış bir şekilde sıralanırsa bu yöntem bir özel durum oluşturabilir. Örneğin, Direct 3D 9 ile, dizini oluşturulan geometri verileri ve çizilecek örnek sayısı her zaman SetStreamSourceFreq()
API'si ile akışta sıfır olarak ayarlanmalıdır.
Bu durum, CreateVertexBufferForInstance()
kullanılarak oluşturulan köşe ara belleğinin, köşe gölge programına girdi olarak SetVertexBufferAt()
ile düzenlenirken en küçük dizin numarasını almaması gerektiği anlamına gelir. CreateVertexBuffer()
kullanılarak oluşturulan köşe ara belleğine, CreateVertexBufferForInstance()
öğesinden daha küçük bir dizin numarası verilmelidir. Genel olarak, geometri verileri, SetVertexBufferAt()
ile örnek başına verilerin önüne yerleştirilmelidir.
Parametreler
indexBuffer:IndexBuffer3D — oluşturulacak köşe noktalarına başvuruda bulunan bir köşe dizini kümesi.
| |
numInstances:int — oluşturulacak örnek sayısı.
| |
firstIndex:int (default = 0 ) — oluşturulmak üzere seçilmiş ilk köşe dizininin dizini. Varsayılan 0.
| |
numTriangles:int (default = -1 ) — oluşturulacak üçgen sayısı. Her üçgen üç dizin kullanır. Dizin arabelleğindeki tüm üçgenleri çizmek için -1 değerini iletir. Varsayılan -1.
|
Atar
Error — Nesne Atıldı: Bu Context3D nesnesi dispose() çağrısıyla mı yoksa temel oluşturma donanımı kaybolduğu için mi atıldı?
| |
Error — Bu yöntemin present() öğesine yönelik çağrılar arasında çok fazla çağrılması durumunda. En fazla çağrı sayısı 32.768'dir.
| |
Error — Standart Genişletilmiş Profil veya Üzerini gerektirir: istenen profil standart genişletilmiş profilden az olduğunda bu yöntem çağrılırsa.
| |
Error — Bu yöntem negatif numInstances ile çağrılırsa.
Aşağıdaki hatalar yalnızca | |
Error — Çizimden Önce Temizlemek Gerekir: Arabellek son present() çağrısından beri temizlenmediyse.
| |
Error — Geçerli bir Program3D nesnesi ayarlanmadıysa.
| |
Error — Geçerli Dizin Arabelleği Ayarı Yok: Bir IndexBuffer3D nesnesi ayarlanmadıysa.
| |
Error — Parametrelerdeki Sağlamlık Denetimi Başarısız Oldu: Çizilecek üçgen sayısı veya firstIndex izin verilen değerleri aşarsa.
| |
RangeError — Bu Arabellekte Yeteri Kadar Dizin Yok: Dizinde çizilecek üçgenlerin sayısını tanımlayacak yeteri kadar dizin olmadığında.
| |
Error — Oluşturmaya Bağlı Örnek Bağlar Dokusu: Oluşturma hedefi bir doku olduğunda ve bu doku geçerli parça programının doku girdisine atandığında.
| |
Error — Örnek Bağlar Geçersiz Dokusu: Geçersiz bir doku, geçerli parça programının girdisi olarak belirtilir.
| |
Error — Örnekleyici Biçimi, Doku Biçimiyle Eşleşmiyor: Doku, geçerli parça programına girdi olarak atandığında ve örnekleyici kaydı için belirtilen biçimden farklı bir biçime sahip olduğunda. Örneğin, bir 2B dokusu küp dokusu örnekleyicisine atanır.
| |
Error — Örnek Bağlar Tanımlanmayan Dokusu: Geçerli parça programı ayarlanmayan (setTextureAt() kullanarak) bir doku kaydına erişiyor.
| |
Error — Aynı Doku İçin Aynı Parametreler Gereklidir: Bir doku birden fazla örnekleyici kaydı için kullanılıyorsa örnekleyicilerin tamamının ayarlarının aynı olması gerekir. Örneğin, bir örnekleyiciyi kelepçelemek bir diğerini de sarmak üzere ayarlayamazsınız.
| |
Error — Doku Bağlı Ancak Kullanılmıyor: Bir doku gölgelendirici bir girdi olarak belirlenmiş ancak kullanılmıyor.
| |
Error — Akış Kullanılmıyor: Bir köşe arabelleği, köşe niteliği girdisine atanır ancak köşe programı, karşılık gelen kayda başvurmaz.
| |
Error — Akış Geçersiz: Bir köşe programı girdisine atanan VertexBuffer3D nesnesi geçerli bir nesne değildir.
| |
RangeError — Akışta Yeteri Kadar Köşe Noktası Yok: Belirtilen üçgenleri çizmek için veri sağlayan bir köşe arabelleğinde yeterli miktarda veri yoktur.
| |
RangeError — Akış Köşesi Kenar Uzaklığı Sınırı Aştı: setVertexBufferAt() çağrısında belirtilen kenar uzaklığı negatiftir veya arabellek sınırını aşmıştır.
| |
Error — Akış Okunuyor Ancak Ayarlı Değil: Geçerli köşe programı tarafından kullanılan bir köşe niteliği ayarlanmamıştır (setVertexBufferAt() kullanarak).
| |
Error — Köşe Arabellek Akışı Örnekler İçin Yeterli Öğe İçermiyor: Bir köşe arabellek akışı örnek sayısı için yeterli öğe içermiyorsa.
| |
Error — Örnekler için Köşe Ara Bellek Akışı En Küçük Dizin Özniteliği Kaydı ile Yanlış Ayarlanmış: CreateVertexBuffer() kullanılarak oluşturulan köşe ara belleğine, CreateVertexBufferForInstance() ile oluşturulan köşe ara belleğinden daha büyük bir dizin numarası verilmişse.
|
İlgili API Öğeleri
VertexBuffer3D.upload()
IndexBuffer3D.upload()
flash.display3D.textures.Texture
Program3D
Örnek ( Bu örnek nasıl kullanılır? )
package { import com.adobe.utils.v3.AGALMiniAssembler; import flash.display.Sprite; import flash.display.Stage3D; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.display3D.Context3D; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DTriangleFace; 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.utils.ByteArray; public class Context3D_HelloInstancedDrawing extends Sprite { private var W:int; private var H:int; private var renderContext:Context3D; private var program:Program3D; private var vertexBuffer:VertexBuffer3D; private var instanceBufferColor:VertexBuffer3D; private var instanceBufferTranslation:VertexBuffer3D; private var indexBuffer:IndexBuffer3D; private var m:Matrix3D; private var vertexShader:ByteArray; private var fragmentShader:ByteArray; public function Context3D_HelloInstancedDrawing() { if (hasEventListener(Event.ADDED_TO_STAGE)) removeEventListener(Event.ADDED_TO_STAGE, init); W = stage.stageWidth; H = stage.stageHeight; stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; stage.stage3Ds[0].addEventListener(Event.CONTEXT3D_CREATE, contextCreated); //We need to request context3D in standard extended profile as instanced drawing requires standard extended profile. stage.stage3Ds[0].requestContext3D("auto","standardExtended"); } //Note: <code>context3DCreate</code> event can happen at any time. For example, when the hardware resources are taken up by another process. private function contextCreated( event:Event ):void { var t:Stage3D = event.target as Stage3D; renderContext = t.context3D; trace( "3D driver: " + renderContext.driverInfo ); setupScene(); } private function setupScene():void { renderContext.enableErrorChecking = true; renderContext.configureBackBuffer( W, H, 2, false ); renderContext.setCulling( Context3DTriangleFace.BACK ); //create vertex buffer for geometry information of the instances (same geometry of the instances) vertexBuffer = renderContext.createVertexBuffer(3, 3); //The color and translation information varies across the instances. Use <code>createVertexBufferForInstances</code> for color and translation information. //the intancesPerElement parameter used is 1 which means that each instance will use unique element of the instances buffer //if the intancesPerElement is 3 then sets of 3 instances will use the same element of the instances buffer instanceBufferColor = renderContext.createVertexBufferForInstances(4,3,1); instanceBufferTranslation = renderContext.createVertexBufferForInstances(4,3,1); //create index buffer for the triangle indexBuffer = renderContext.createIndexBuffer(3); //create and compile program program = renderContext.createProgram(); var assembler:AGALMiniAssembler = new AGALMiniAssembler(); // VERTEX SHADER var code:String = ""; //The vertex shader code runs for every vertex of each instance. //The vertex buffers uploaded for instance data (va1,va2) are used when the vertex shader for that particular instance is being executed. code += "add vt0, va0, va2\n"; code += "mov op, vt0\n"; code += "mov v0, va1\n"; vertexShader = assembler.assemble(Context3DProgramType.VERTEX, code); //FRAGMENT SHADER code = "mov oc, v0\n"; // Compile the agal code into bytecode using agalminiassembler fragmentShader = assembler.assemble(Context3DProgramType.FRAGMENT, code); //upload program to gpu program.upload(vertexShader, fragmentShader); //geometry data for the instances var vertexData:Vector.<Number>=Vector.<Number>([ -0.3, -0.3, 0, // - 1st vertex x,y,z 0, 0.3, 1, // - 2nd vertex x,y,z 0.3, -0.3, 0 // - 3rd vertex x,y,z ]); //per instance color data var instanceColorData:Vector.<Number>=Vector.<Number>([ 1.0, 0.0, 0.0, // - 1st instance r,g,b 0.0, 1.0, 0.0, // - 2nd instance r,g,b 1.0, 1.0, 1.0, // - 3rd instance r,g,b 0.7, 0.0, 1.0 // - 4th instance r,g,b ]); //per instance translation data var instanceTranslationData:Vector.<Number>=Vector.<Number>([ -0.3, -0.3, 0.0, // - 1st instance x,y,z 0.3, 0.3, 0.0, // - 2nd instance x,y,z -0.3, 0.3, 0.0, // - 3rd instance x,y,z 0.3, -0.3, 0.0 // - 4th instance x,y,z ]); vertexBuffer.uploadFromVector(vertexData, 0, 3); instanceBufferColor.uploadFromVector(instanceColorData, 0, 4); indexBuffer.uploadFromVector(Vector.<uint>([0, 1, 2]), 0, 3); instanceBufferTranslation.uploadFromVector(instanceTranslationData, 0, 4); //pass data to program renderContext.setVertexBufferAt(0, vertexBuffer, 0, Context3DVertexBufferFormat.FLOAT_3); renderContext.setVertexBufferAt(1, instanceBufferColor, 0, Context3DVertexBufferFormat.FLOAT_3); renderContext.setVertexBufferAt(2, instanceBufferTranslation, 0, Context3DVertexBufferFormat.FLOAT_3); //set active program renderContext.setProgram(program); renderContext.enableErrorChecking = true; addEventListener(Event.ENTER_FRAME, render); } private function render( event:Event ):void { renderContext.clear(0.3, 0.2, 1, 1); // Clear the backbuffer by filling it with the given color //Draw three instances of the same geometry but with varying instance data specified using <code>vertexBufferForInstances</code>. renderContext.drawTrianglesInstanced(indexBuffer,4); renderContext.present(); // render the backbuffer on screen. } } }
package { import com.adobe.utils.v3.AGALMiniAssembler; import flash.display.Sprite; import flash.display.Stage3D; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.display3D.Context3D; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DTriangleFace; 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.utils.ByteArray; public class Context3D_HelloInstanceIdRegister extends Sprite { private var W:int; private var H:int; private var renderContext:Context3D; private var program:Program3D; private var vertexBuffer:VertexBuffer3D; private var instanceBufferColor:VertexBuffer3D; private var instanceBufferTranslation:VertexBuffer3D; private var indexBuffer:IndexBuffer3D; private var m:Matrix3D; private var vertexShader:ByteArray; private var fragmentShader:ByteArray; public function Context3D_HelloInstanceIdRegister() { if (hasEventListener(Event.ADDED_TO_STAGE)) removeEventListener(Event.ADDED_TO_STAGE, init); W = stage.stageWidth; H = stage.stageHeight; stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; stage.stage3Ds[0].addEventListener(Event.CONTEXT3D_CREATE, contextCreated); //We need to request context3D in standard extended profile as instanced drawing requires standard extended profile. stage.stage3Ds[0].requestContext3D("auto","standardExtended"); } //Note: <code>context3DCreate</code> event can happen at any time. For example, when the hardware resources are taken up by another process. private function contextCreated( event:Event ):void { var t:Stage3D = event.target as Stage3D; renderContext = t.context3D; trace( "3D driver: " + renderContext.driverInfo ); setupScene(); } private function setupScene():void { renderContext.enableErrorChecking = true; renderContext.configureBackBuffer( W, H, 2, false ); renderContext.setCulling( Context3DTriangleFace.BACK ); //create vertex buffer for geometry information of the instances (same geometry of the instances) vertexBuffer = renderContext.createVertexBuffer(3, 3); //The color and translation information varies across the instances. Use <code>createVertexBufferForInstances</code> for color and translation information. //the intancesPerElement parameter used is 1 which means that each instance will use unique element of the instances buffer //if the intancesPerElement is 3 then sets of 3 instances will use the same element of the instances buffer instanceBufferColor = renderContext.createVertexBufferForInstances(4,3,1); instanceBufferTranslation = renderContext.createVertexBufferForInstances(4,3,1); //create index buffer for the triangle indexBuffer = renderContext.createIndexBuffer(3); //create and compile program program = renderContext.createProgram(); //Note : for instance id support , use the latest AgalMiniAssembler from github - https://github.com/adobe-flash/graphicscorelib/blob/master/src/com/adobe/utils/v3/AGALMiniAssembler.as var assembler:AGALMiniAssembler = new AGALMiniAssembler(); // VERTEX SHADER var code:String = ""; //the vertex shader code will run for every vertex of every instance , //the vertex buffers uploaded for instance data (va1,va2) will be used when vertex shader for that particular instance is being executed //the vertex shader code below indexes the program constants matrix using iid.x. iid is a new register introduced in vertex shader for instanced drawing //it is a read only register , iid.x gives the current instance id whose shader is being executed code += "add vt0, va0, va2\n"; code += "mul vt1, vt0, vc[iid.x]\n" code += "mov op, vt1\n"; code += "mov v0, va1\n"; vertexShader = assembler.assemble(Context3DProgramType.VERTEX, code, 3); //FRAGMENT SHADER code = "mov oc, v0\n"; // Compile the agal code into bytecode using agalminiassembler fragmentShader = assembler.assemble(Context3DProgramType.FRAGMENT, code, 3); //upload program to gpu program.upload(vertexShader, fragmentShader); //geometry data for the instances var vertexData:Vector.<Number>=Vector.<Number>([ -0.3, -0.3, 0, // - 1st vertex x,y,z 0, 0.3, 1, // - 2nd vertex x,y,z 0.3, -0.3, 0 // - 3rd vertex x,y,z ]); //per instance color data var instanceColorData:Vector.<Number>=Vector.<Number>([ 1.0, 0.0, 0.0, // - 1st instance r,g,b 0.0, 1.0, 0.0, // - 2nd instance r,g,b 1.0, 1.0, 1.0, // - 3rd instance r,g,b 0.7, 0.0, 1.0 // - 4th instance r,g,b ]); //per instance translation data var instanceTranslationData:Vector.<Number>=Vector.<Number>([ -0.3, -0.3, 0.0, // - 1st instance x,y,z 0.3, 0.3, 0.0, // - 2nd instance x,y,z -0.3, 0.3, 0.0, // - 3rd instance x,y,z 0.3, -0.3, 0.0 // - 4th instance x,y,z ]); vertexBuffer.uploadFromVector(vertexData, 0, 3); instanceBufferColor.uploadFromVector(instanceColorData, 0, 4); indexBuffer.uploadFromVector(Vector.<uint>([0, 1, 2]), 0, 3); instanceBufferTranslation.uploadFromVector(instanceTranslationData, 0, 4); //pass data to program renderContext.setVertexBufferAt(0, vertexBuffer, 0, Context3DVertexBufferFormat.FLOAT_3); renderContext.setVertexBufferAt(1, instanceBufferColor, 0, Context3DVertexBufferFormat.FLOAT_3); renderContext.setVertexBufferAt(2, instanceBufferTranslation, 0, Context3DVertexBufferFormat.FLOAT_3); //set active program renderContext.setProgram(program); renderContext.enableErrorChecking = true; addEventListener(Event.ENTER_FRAME, render); } private function render( event:Event ):void { renderContext.clear(0.3, 0.2, 1, 1); // Clear the backbuffer by filling it with the given color var instanceScalingData:Vector.<Number>=Vector.<Number>([ 1.0, 1.0, 1.0, 1.0, // - 1st instance x,y,z,w 1.4, 1.4, 1.4, 1.0, // - 2nd instance x,y,z,w 0.6, 0.6, 0.6, 1.0, // - 3rd instance x,y,z,w 0.6, 0.6, 0.6, 1.0 ]); var m:Matrix3D = new Matrix3D(); m.copyRawDataFrom(instanceScalingData); renderContext.setProgramConstantsFromMatrix("vertex",0,m,false); //Draw three instances of the same geometry but with varying instance data specified using <code>vertexBufferForInstances</code>. renderContext.drawTrianglesInstanced(indexBuffer,4); renderContext.present(); // render the backbuffer on screen. } } }
present | () | yöntem |
public function present():void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
Geri oluşturma arabelleğini görüntüler.
present()
yöntemini çağırmak son present()
çağrısından itibaren gerçekleştirilen tüm oluşturma işlemlerinin sonuçlarını görünür kılar ve yeni bir oluşturma döngüsü başlatır. present
öğesini çağırdıktan sonra başka bir drawTriangles()
çağrısı yapmadan önce clear()
öğesini çağırmanız gerekir. Aksi takdirde bu işlev oluşturma arabelleğini alternatif olarak sarı ve yeşille temizler veya enableErrorChecking
, true
olarak ayarlandıysa bir istisna atılır.
Ayrıca, present()
çağrısı tıpkı setRenderToBackBuffer()
öğesini çağırmak gibi oluşturma hedefini sıfırlar.
Atar
Error — Çizimden Önce Temizlenmesi Gerekir: Bir önceki present() çağrısından beri clear() çağırılmadıysa. (Art arda iki kere present() öğesini çağırmaya, aralarında clear() çağrısı yapmadan izin verilmez.)
| |
Error — 3768: Stage3D API, arka planda çalışma sırasında kullanılmayabilir.
|
setBlendFactors | () | yöntem |
public function setBlendFactors(sourceFactor:String, destinationFactor:String):void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
Mevcut renkle yapılan bir çizim işleminin çıktı rengini karıştırmada kullanılan faktörleri belirler.
Piksel gölgelendirici programının çıktı (kaynak) rengi, o pikseldeki mevcut (hedef) renkle aşağıdaki formüle göre birleştirilir:
result color = (source color * sourceFactor) + (destination color * destinationFactor)
Hedef renk, o piksel için oluşturma arabelleğindeki geçerli renktir. Bu, en son yapılan clear()
çağrısı ve araya giren drawTriangles()
çağrılarının sonucudur.
Kaynak ve hedef renkler birbirine eklenmeden bunları çarpmak için kullanılan faktörleri ayarlamak için setBlendFactors()
yöntemini kullanın. Varsayılan karışım faktörleri sourceFactor = Context3DBlendFactor.ONE
ile destinationFactor = Context3DBlendFactor.ZERO
şeklindedir ve kaynak rengin hedef rengi geçersiz kılmasıyla sonuçlanır (bir başka deyişle, iki rengin karışması gerçekleşmez). Normal alfa karıştırması için sourceFactor = Context3DBlendFactor.SOURCE_ALPHA
ve destinationFactor = Context3DBlendFactor.ONE_MINUS_SOURCE_ALPHA
öğelerini kullanın.
Bu işlevin parametrelerini ayarlamak için Context3DBlendFactor sınıfında tanımlanan sabitleri kullanın.
Parametreler
sourceFactor:String — Kaynak rengin çarpılacağı faktör. Varsayılan olarak Context3DBlendFactor.ONE değerini alır.
| |
destinationFactor:String — Hedef rengin çarpılacağı faktör. Varsayılan olarak Context3DBlendFactor.ZERO değerini alır.
|
Atar
Error — Geçersiz Numaralandırma: sourceFactor veya destinationFactor Context3DBlendFactor sınıfında tanımlanan değerlerden birisi olmadığında.
|
İlgili API Öğeleri
Örnek ( Bu örnek nasıl kullanılır? )
package { import com.adobe.utils.AGALMiniAssembler; import flash.display.Sprite; import flash.display.Stage3D; import flash.display3D.Context3D; import flash.display3D.Context3DBlendFactor; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DRenderMode; import flash.display3D.Context3DVertexBufferFormat; import flash.display3D.IndexBuffer3D; import flash.display3D.Program3D; import flash.display3D.VertexBuffer3D; import flash.events.ErrorEvent; import flash.events.Event; import flash.events.KeyboardEvent; import flash.ui.Keyboard; public class Context3D_setBlendMode extends Sprite { public const viewWidth:Number = 320; public const viewHeight:Number = 200; private var stage3D:Stage3D; private var renderContext:Context3D; private var indexList:IndexBuffer3D; private var vertexes:VertexBuffer3D; private const VERTEX_SHADER:String = "mov op, va0 \n" + //copy position to output "mov v0, va1"; //copy color to varying variable v0 private const FRAGMENT_SHADER:String = "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var programPair:Program3D; private var sourceFactor:int = 6; private var destinationFactor:int = 4; private var blendFactors:Array = [Context3DBlendFactor.DESTINATION_ALPHA, Context3DBlendFactor.DESTINATION_COLOR, Context3DBlendFactor.ONE, Context3DBlendFactor.ONE_MINUS_DESTINATION_ALPHA, Context3DBlendFactor.ONE_MINUS_SOURCE_ALPHA, Context3DBlendFactor.ONE_MINUS_SOURCE_COLOR, Context3DBlendFactor.SOURCE_ALPHA, Context3DBlendFactor.SOURCE_COLOR, Context3DBlendFactor.ZERO]; public function Context3D_setBlendMode() { this.stage.addEventListener( KeyboardEvent.KEY_DOWN, keyHandler ); stage3D = this.stage.stage3Ds[0]; stage3D.x = 10; stage3D.y = 10; //Add event listener before requesting the context stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated ); stage3D.addEventListener( ErrorEvent.ERROR, contextError ); stage3D.requestContext3D( Context3DRenderMode.AUTO ); //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); } //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process private function contextCreated( event:Event ):void { renderContext = Stage3D( event.target ).context3D; trace( "3D driver: " + renderContext.driverInfo ); renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing renderContext.configureBackBuffer( viewWidth, viewHeight, 2, false ); //Create vertex index list for the triangles var triangles:Vector.<uint> = Vector.<uint>( [ 0, 3 , 2, 0, 1, 3, 6, 4, 5, 5, 7, 6, 10, 8, 9, 9, 11, 10, 12, 15, 14, 12, 13, 15, 16, 17, 19, 16, 19, 18 ] ); indexList = renderContext.createIndexBuffer( triangles.length ); indexList.uploadFromVector( triangles, 0, triangles.length ); //Create vertexes const dataPerVertex:int = 7; var vertexData:Vector.<Number> = Vector.<Number>( [ // x, y, z r, g, b, a format -1, 1, 0, 1, 1, 1, .5, 0, 1, 0, 1, 1, 1, .5, -1, 0, 0, 1, 1, 1, .5, 0, 0, 0, 1, 1, 1, .5, 0, 1, 0, .8,.8,.8, .6, 1, 1, 0, .8,.8,.8, .6, 0, 0, 0, .8,.8,.8, .6, 1, 0, 0, .8,.8,.8, .6, -1, 0, 0, 1, 0, 0, .5, 0, 0, 0, 0, 1, 0, .5, -1,-1, 0, 0, 0, 1, .5, 0,-1, 0, 1, 0, 1, .5, 0, 0, 0, 0, 0, 0, .5, 1, 0, 0, 0, 0, 0, .5, 0,-1, 0, 0, 0, 0, .5, 1,-1, 0, 0, 0, 0, .5, -.8,.8, 0, .6,.4,.2,.4, .8,.8, 0, .6,.4,.2,.4, -.8,-.8, 0, .6,.4,.2,.4, .8,-.8, 0, .6,.4,.2,.4 ] ); vertexes = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex ); vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex ); //Identify vertex data inputs for vertex program renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //va0 is position renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_4 ); //va1 is color //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair ); render(); } private function render():void { //Clear required before first drawTriangles() call renderContext.clear( 1, 1, 1, 1 ); //Draw the back triangles renderContext.setBlendFactors( Context3DBlendFactor.ONE, Context3DBlendFactor.ZERO ); //No blending renderContext.drawTriangles( indexList, 0, 8 ); //Set blend renderContext.setBlendFactors( blendFactors[sourceFactor], blendFactors[destinationFactor] ); //Draw the front triangles renderContext.drawTriangles( indexList, 24, 2 ); //Show the frame renderContext.present(); } private function contextError( error:ErrorEvent ):void { trace( error.errorID + ": " + error.text ); } private function keyHandler( event:KeyboardEvent ):void { switch ( event.keyCode ) { case Keyboard.NUMBER_1: if( --sourceFactor < 0 ) sourceFactor = blendFactors.length - 1; break; case Keyboard.NUMBER_2: if( ++sourceFactor > blendFactors.length - 1) sourceFactor = 0; break; case Keyboard.NUMBER_3: if( --destinationFactor < 0 ) destinationFactor = blendFactors.length - 1; break; case Keyboard.NUMBER_4: if( ++destinationFactor > blendFactors.length - 1) destinationFactor = 0; break; } trace( "Source blend factor: " + blendFactors[sourceFactor] + ", destination blend factor: " + blendFactors[destinationFactor] ); render(); } } }
setColorMask | () | yöntem |
public function setColorMask(red:Boolean, green:Boolean, blue:Boolean, alpha:Boolean):void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
Oluşturma arabelleğine renk yazarken kullanılan maskeyi ayarlar.
Oluşturma arabelleğine bir renk yazıldığında, yalnızca karşılık gelen renk maske parametresi true
olan renk bileşenleri güncellenir. Örneğin setColorMask( true, false, false, false )
ayarını çağırırsanız, siz renk maskesini tekrar değiştirene kadar yalnızca bir rengin kırmızı bileşeni arabelleğe yazılır. Renk maskesi clear()
yönteminin davranışını etkilemez.
Parametreler
red:Boolean — kırmızı kanalında yapılacak değişiklikleri engellemek için false olarak ayarlayın.
| |
green:Boolean — yeşil kanalında yapılacak değişiklikleri engellemek için false olarak ayarlayın.
| |
blue:Boolean — mavi kanalında yapılacak değişiklikleri engellemek için false olarak ayarlayın.
| |
alpha:Boolean — alfa kanalında yapılacak değişiklikleri engellemek için false olarak ayarlayın.
|
Örnek ( Bu örnek nasıl kullanılır? )
package { import com.adobe.utils.AGALMiniAssembler; import flash.display.Sprite; import flash.display.Stage3D; import flash.display3D.Context3D; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DRenderMode; import flash.display3D.Context3DVertexBufferFormat; import flash.display3D.IndexBuffer3D; import flash.display3D.Program3D; import flash.display3D.VertexBuffer3D; import flash.events.Event; public class Context3D_setColorMask extends Sprite { public const viewWidth:Number = 320; public const viewHeight:Number = 200; private var stage3D:Stage3D; private var renderContext:Context3D; private var indexList:IndexBuffer3D; private var vertexes:VertexBuffer3D; private const VERTEX_SHADER:String = "mov op, va0 \n" + //copy position to output "mov v0, va1"; //copy color to varying variable v0 private const FRAGMENT_SHADER:String = "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var programPair:Program3D; public function Context3D_setColorMask() { stage3D = this.stage.stage3Ds[0]; stage3D.x = 10; stage3D.y = 10; //Add event listener before requesting the context stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated ); stage3D.requestContext3D( Context3DRenderMode.AUTO ); //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); } //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process private function contextCreated( event:Event ):void { renderContext = Stage3D( event.target ).context3D; trace( "3D driver: " + renderContext.driverInfo ); renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing renderContext.configureBackBuffer( viewWidth, viewHeight, 2, false ); //Create vertex index list for the triangles var triangles:Vector.<uint> = Vector.<uint>( [ 0, 1, 2, 0, 3, 4 ] ); indexList = renderContext.createIndexBuffer( triangles.length ); indexList.uploadFromVector( triangles, 0, triangles.length ); //Create vertexes const dataPerVertex:int = 6; var vertexData:Vector.<Number> = Vector.<Number>( [ // x, y, z r, g, b format 0, 0, 0, 1, 1, 1, -1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,-1, 0, 1, 1, 1, -1,-1, 0, 1, 1, 1 ] ); vertexes = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex ); vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex ); //Identify vertex data inputs for vertex program renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //va0 is position renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //va1 is color //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair ); renderContext.clear( .3,.3,.3,1 ); renderContext.drawTriangles( indexList, 0, 1 ); //Top triangle draws all colors, so is white renderContext.setColorMask( true, false, false, false ); //Mask all but red channel renderContext.drawTriangles( indexList, 3, 1 ); //Bottom triangle only updates red //Show the frame renderContext.present(); } } }
setCulling | () | yöntem |
public function setCulling(triangleFaceToCull:String):void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
Üçgen ayırma modunu ayarlar.
Üçgenler, görüntüleme düzlemine göre olan yönlendirmelerine dayanarak görüntü oluşturma ardışık düzeninden önceden çıkarılabilir. Doğru bir şekilde seçmek için köşe sayısını modelin dış kısmından göründüğü şekilde tutarlı bir şekilde (saat yönünde veya saat yönünün tersine) belirtin.
Parametreler
triangleFaceToCull:String — ayırma modu. Context3DTriangleFace sınıfında tanımlanan sabitlerden birini kullanın.
|
Atar
Error — Geçersiz Numaralandırma Hatası: triangleFaceToCull değeri, Context3DTriangleFace sınıfında tanımlanan değerlerden biri olmadığında.
|
İlgili API Öğeleri
setDepthTest | () | yöntem |
public function setDepthTest(depthMask:Boolean, passCompareMode:String):void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
Derinlik testi için kullanılan karşılaştırma türünü ayarlar.
Piksel gölgelendirici programından çıkan kaynak piksel çıktısının derinliği, derinlik arabelleğindeki geçerli değerle karşılaştırılır. Karşılaştırma false
olarak değerlendirme yaparsa kaynak piksel atılır. true
olarak değerlendirme yaparsa kaynak piksel, oluşturma hattının bir sonraki adımı olan şablon testi tarafından işlenir. Ayrıca, depthMask
parametresi true
olarak ayarlandığı sürece derinlik arabelleği, kaynak pikselin derinliğiyle güncellenir.
Kaynak ve hedef pikseller için derinlik değerlerini karşılaştırmak üzere kullanılan testi ayarlar. Karşılaştırma true değerine sahip olduğunda kaynak piksel hedef pikselle birleştirilir. Karşılaştırma işleci, kaynak ve hedef piksel değerlerinin arasına bir içek işleci olarak bu şekilde uygulanır.
Parametreler
depthMask:Boolean — hedef derinlik değeri, değer true olduğunda kaynak pikselden güncellenir.
| |
passCompareMode:String — derinlik karşılaştırma testi işlemi. Context3DCompareMode öğesinin değerlerinden biri.
|
İlgili API Öğeleri
setFillMode | () | yöntem |
public function setFillMode(fillMode:String):void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | AIR 16 |
Oluşturma için kullanılan dolgu modunu ayarlayın. Arabirim yalnızca AIR masaüstünde kullanılabilir.
Parametreler
fillMode:String — değer WIREFRAME ise nesne bir çizgi ızgarası halinde gösterilir. değer SOLID ise nesne tek parçalı gölgeli poligonlar halinde gösterilir.
|
İlgili API Öğeleri
setProgram | () | yöntem |
public function setProgram(program:Program3D):void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
Sonraki oluşturmada kullanmak üzere köşe ve parça programlarını ayarlar.
Parametreler
program:Program3D — Kullanılacak köşe ve parça programlarını temsil eden Program3D nesnesi
|
İlgili API Öğeleri
Örnek ( Bu örnek nasıl kullanılır? )
renderContext
nesnesinin, bir Context3D sınıfı örneği olduğunu unutmayın. Örnekteki programlar Adobe Grafikleri Çevirici Dili'nde (AGAL) yazılmıştır.
//A simple vertex program in AGAL const VERTEX_SHADER:String = "m44 op, va0, vc0 \n" + "mov v0, va1"; //A simple fragment (or pixel) program in AGAL const FRAGMENT_SHADER:String = "mov oc, v0"; var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); var programPair:Program3D; //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair );
setProgramConstantsFromByteArray | () | yöntem |
public function setProgramConstantsFromByteArray(programType:String, firstRegister:int, numRegisters:int, data:ByteArray, byteArrayOffset:uint):void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11.1, AIR 3.1 |
Gölgelendirici programlar tarafından kullanılması için ByteArray
öğesinde saklanan değerleri kullanarak sabitler ayarlar.
Köşe veya parça programından erişilebilecek sabitleri ayarlar.
Parametreler
programType:String — Context3DProgramType öğelerinden biri.
| |
firstRegister:int — ayarlanacak ilk gölgelendirici programı sabitinin dizini.
| |
numRegisters:int — ayarlanacak kayıt sayısı. Her kayıt, dört kayan değer olarak okunur.
| |
data:ByteArray — kaynak ByteArray nesnesi
| |
byteArrayOffset:uint — okuma için ByteArray'e olan uzaklık
|
Atar
TypeError — data öğesi boş olduğunda kNullPointerError.
| |
RangeError — Gölgelendirici sabitlerinin maksimum sayısından daha fazlası ayarlanmaya çalışıldığında kConstantRegisterOutOfBounds.
| |
RangeError — byteArrayOffset değeri data uzunluğu ile eşit veya daha büyükse veya data - byteArrayOffset içindeki öğeler numRegisters *16 değerinden küçükse kBadInputSize
|
İlgili API Öğeleri
setProgramConstantsFromMatrix | () | yöntem |
public function setProgramConstantsFromMatrix(programType:String, firstRegister:int, matrix:Matrix3D, transposedMatrix:Boolean = false):void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
Bir Matrix3D
öğesinde saklanan değerleri kullanarak sabitleri gölgelendirici programları tarafından kullanılmak üzere ayarlayın.
Bir gölgelendirici programına matris iletmek üzere bu işlevi kullanın. İşlev, köşe veya parça programının kullandığı 4 sabit kayıt ayarlar. Matris, kayıtlara satırlar halinde atanır. İlk sabit kaydı, matrisin üst satırına atanır. Köşe programı için 128, parça programı için de 28 kayıt ayarlayabilirsiniz.
Parametreler
programType:String — Context3DProgramType.VERTEX veya Context3DProgramType.FRAGMENT olmak üzere gölgelendirici programının türü.
| |
firstRegister:int — ayarlanacak ilk sabit kaydının dizini Bir Matrix3D öğesinin 16 değeri olduğundan dört kayıt ayarlanır.
| |
matrix:Matrix3D — sabit değerleri içeren matris.
| |
transposedMatrix:Boolean (default = false ) — değer true ise matris girişleri kayıtlara sıraları değiştirilmiş şekilde kopyalanır. Varsayılan değer false şeklindedir.
|
Atar
TypeError — Boş İşaretçi Hatası: matrix null olduğunda.
| |
RangeError — Sabit Kaydı Sınırı Aştı: Gölgelendirici sabit kayıtlarının maksimum sayısından daha fazla ayarlamaya çalışıldığında.
|
Daha fazla bilgi
İlgili API Öğeleri
setProgramConstantsFromVector | () | yöntem |
public function setProgramConstantsFromVector(programType:String, firstRegister:int, data:Vector.<Number>, numRegisters:int = -1):void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
Gölgelendirici programları için sabit girdilerini ayarlar.
Bir köşe veya parça gölgelendirici programı tarafından erişilecek sabit dizisi ayarlar. Program3D içinde ayarlanan sabitlere gölgelendirici programlarından sabit kayıtları olarak erişilir. Her sabit kaydı 4 kayan nokta değerinden (x, y, z, w) oluşur. Bu nedenle her kayıt, verinin Vector öğesinde 4 giriş gerektirir. Köşe programı ve parça programı için ayarlayabileceğiniz kayıt sayısı Context3DProfile
değerine bağlıdır.
Parametreler
programType:String — Context3DProgramType.VERTEX veya Context3DProgramType.FRAGMENT olmak üzere gölgelendirici programının türü.
| |
firstRegister:int — ayarlanacak ilk sabit kaydının dizini
| |
data:Vector.<Number> — kayan nokta sabit değerleri. data içinde en az numRegisters 4 öğe olmalıdır.
| |
numRegisters:int (default = -1 ) — ayarlanacak sabit sayısı. Mevcut verilerin tamamını kullanacak şekilde yeterli sayıda kayıt ayarlamak üzere varsayılan değer olarak -1 belirtin.
|
Atar
TypeError — Boş İşaretçi Hatası: data null olduğunda.
| |
RangeError — Sabit Kaydı Sınırı Aştı: Gölgelendirici sabit kayıtlarının maksimum sayısından daha fazla ayarlamaya çalışıldığında.
| |
RangeError — Hatalı Giriş Boyutu: data içindeki öğe sayısı numRegisters *4 değerinden küçük olduğunda
|
Daha fazla bilgi
İlgili API Öğeleri
setRenderToBackBuffer | () | yöntem |
public function setRenderToBackBuffer():void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
Geri oluşturma arabelleğini, oluşturma hedefi olarak ayarlar. drawTriangles()
ve clear()
yöntemlerinden sonraki çağrılar, geri arabellekte güncellemelere neden olur. setRenderToTexture()
yöntemini kullandıktan sonra normal oluşturmaya devam etmek için bu yöntemi kullanın.
setRenderToTexture | () | yöntem |
public function setRenderToTexture(texture:flash.display3D.textures:TextureBase, enableDepthAndStencil:Boolean = false, antiAlias:int = 0, surfaceSelector:int = 0, colorOutputIndex:int = 0):void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
Belirtilen dokuyu oluşturma hedefi olarak ayarlar.
drawTriangles()
ve clear()
yöntemlerinden sonra yapılan çağrılar geri arabellek yerine belirtilen dokuyu günceller. Mipmap'ler otomatik olarak oluşturulur. Geri arabellekte normal oluşturmaya devam etmek için setRenderToBackBuffer()
öğesini kullanın.
Çizim öncesinde temizleme gerekli değil. Temizleme işlemi yoksa oluşturma içeriği saklanır. Derinlik arabelleği ve kalıp arabelleği de temizlenmez. Ancak birinci çizim sırasında temizlenmeye zorlanır. present()
öğesini çağırmak hedefi geri arabelleğe sıfırlar.
Parametreler
texture:flash.display3D.textures:TextureBase — oluşturulacak hedef doku. Geri arabelleğe oluşturmaya devam etmek için null değerine ayarlayın (ayrıca setRenderToBackBuffer() ve present öğeleri de hedefi geri arabelleğe sıfırlar).
| |
enableDepthAndStencil:Boolean (default = false ) — true ise, derinlik ve şablon testi kullanılabilir durumdadır. false ise, tüm derinlik ve şablon durumu sonraki çizim işlemleri için yok sayılır.
| |
antiAlias:int (default = 0 ) — kenar yumuşatma özelliği. Kenar yumuşatma özelliğini devre dışı bırakmak için 0'ı kullanın; daha yüksek değerler kenar yumuşatma özelliğini iyileştirir ancak daha fazla hesaplama gerektirir. Değer şu anda mobil platformu ve yazılım oluşturma bağlamı tarafından yok sayılıyor.
| |
surfaceSelector:int (default = 0 ) — dokunun hangi öğesinin güncelleneceğini belirtir. Doku nesnelerinde bir yüzey olduğundan varsayılan değer olarak 0 belirtmelisiniz. CubeTexture nesnelerinde altı yüzey olduğundan 0 ile 5 arasında bir tam sayı belirtebilirsiniz.
| |
colorOutputIndex:int (default = 0 ) — Çıktı rengi kaydı. Sınırlanmış veya taban çizgisi modu için 0 olmalıdır. Aksi takdirde, çıktı rengi kaydını belirtir.
|
Atar
ArgumentError — uyumsuz bir surfaceSelector parametresi için. Değer 2B dokuları için 0, küp eşlemeleri içinse 0-5 olmalıdır.
| |
ArgumentError — texture , TextureBase sınıfından (Texture veya CubeTexture sınıfları) türemez.
| |
ArgumentError — colorOutputIndex değeri 0 ile 3 arasındaki bir tamsayı olmalıdır.
| |
ArgumentError — bu çağrı, standart profil veya üzeri ile oluşturulmuş bir Context3D gerektirir.
|
İlgili API Öğeleri
setSamplerStateAt | () | yöntem |
public function setSamplerStateAt(sampler:int, wrap:String, filter:String, mipfilter:String):void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11.6, AIR 3.6 |
Usually doku örnekleyici durumunu manuel olarak.
Doku örnekleme durumu genellikle setProgram
çağrıldığında ayarlanır. Ancak, bu işlev ile doku örnekleyici durumunu geçersiz kılabilirsiniz. Programın örnekleyici durumunu değiştirmesini istemiyorsanız AGAL'da ignoresamnpler
bit'ini ayarlayın ve bu işlevi kullanın.
Parametreler
sampler:int — örnekleyici Kullanılacak örnekleyici kaydı. AGAL içindeki örnekleyici kaydına eşlenir.
| |
wrap:String — Sarma modu. Context3DWrapMode içinde tanımlanır. Varsayılan değer "tekrarla" şeklindedir.
| |
filter:String — Doku filtreleme modu. Context3DTextureFilter içinde tanımlanır. Varsayılan değer "en yakın" şeklindedir.
| |
mipfilter:String — Mip eşlemi filtresi. Context3DMipFilter içinde tanımlanır. Varsayılan değer "yok" şeklindedir.
|
Atar
Error — örnekleyici aralık dışında
| |
Error — sarma, filtre, mipfilter yanlış numaralandırması
| |
Error — Nesne Atıldı: Bu Context3D nesnesi dispose() çağrısıyla mı yoksa temel oluşturma donanımı kaybolduğu için mi atıldı?
|
İlgili API Öğeleri
setScissorRectangle | () | yöntem |
public function setScissorRectangle(rectangle:Rectangle):void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
Çizim maskesinin türü olan bir makas dikdörtgeni ayarlar. Oluşturucu yalnızca makas dikdörtgeninin içindeki alana çizer. Makaslama, temizleme işlemlerini etkilemez.
Makaslamayı kapatmak için null
iletin.
Parametreler
rectangle:Rectangle — İçinde çizim yapılacak dikdörtgen. Dikdörtgen konumu ve boyutlarını piksel olarak belirtin. Koordinat sistemi orijini, aşağıya ve sağa doğru artan pozitif değerlerle birlikte görünüm penceresinin sol üst köşesindedir (normal Flash görüntüleme koordinat sistemi ile aynı).
|
Örnek ( Bu örnek nasıl kullanılır? )
Üçgenler, köşe arabelleğini ve dizin arabelleğini kullanarak tanımlanır. Köşe arabelleği, her bir üçgen köşesi için konum ve renk bilgilerini içerir. Dizin arabelleği, köşe arabelleğine yönelik dizinler içerir. Üç dizin bir üçgeni tanımlar. Örneğin, köşe arabelleğindeki ilk üç noktadan oluşan bir üçgen, dizin arabelleğinde 0,1,2 olarak listelenir.
Bu basit örnekte, herhangi bir 3B dönüştürme işlemi gerçekleştirilmez. Yalnızca kanonik görüntüleme alanındaki (başlangıç noktası merkezli 2x2x2 küp hacmi) nesneler görüntülenir. Ancak tipik bir 3B sahnesini oluşturulurken, oluşturulacak nesneleri bu görüntüleme alanına bir perspektif veya ortografik izdüşüm kullanarak yansıtırsınız.
package { import com.adobe.utils.AGALMiniAssembler; import flash.display.Sprite; import flash.display.Stage3D; import flash.display3D.Context3D; import flash.display3D.Context3DBlendFactor; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DRenderMode; import flash.display3D.Context3DVertexBufferFormat; import flash.display3D.IndexBuffer3D; import flash.display3D.Program3D; import flash.display3D.VertexBuffer3D; import flash.events.Event; import flash.events.KeyboardEvent; import flash.events.TimerEvent; import flash.geom.Rectangle; import flash.ui.Keyboard; import flash.utils.Timer; public class Context3D_ScissorRectangle extends Sprite { public const viewWidth:Number = 640; public const viewHeight:Number = 480; private var stage3D:Stage3D; private var renderContext:Context3D; private var indexList:IndexBuffer3D; private var vertexes:VertexBuffer3D; private const VERTEX_SHADER:String = "mov op, va0 \n" + //copy position to output "mov v0, va1"; //copy color to varying variable v0 private const FRAGMENT_SHADER:String = "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var programPair:Program3D; private var scissorOn:Boolean = false; private var toggler:Timer = new Timer( 750 ); public function Context3D_ScissorRectangle() { stage3D = this.stage.stage3Ds[0]; stage3D.x = 10; stage3D.y = 10; //Add event listener before requesting the context stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated ); stage3D.requestContext3D( Context3DRenderMode.AUTO ); //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); //Set up timer to turn scissoring on and off toggler.addEventListener( TimerEvent.TIMER, toggleScissor ); } //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process private function contextCreated( event:Event ):void { renderContext = Stage3D( event.target ).context3D; trace( "3D driver: " + renderContext.driverInfo ); renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing renderContext.configureBackBuffer( viewWidth, viewHeight, 2, false ); //Create vertex index list for the triangles var triangles:Vector.<uint> = Vector.<uint>( [ 0, 3 , 2, 0, 1, 3 ] ); indexList = renderContext.createIndexBuffer( triangles.length ); indexList.uploadFromVector( triangles, 0, triangles.length ); //Create vertexes const dataPerVertex:int = 6; var vertexData:Vector.<Number> = Vector.<Number>( [ // x, y, z r, g, b, a format -1, 1, 0, 1,0,0, 1, 1, 0, 0,0,1, -1,-1, 0, 0,1,0, 1,-1, 0, 1,0,1 ] ); vertexes = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex ); vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex ); //Identify vertex data inputs for vertex program renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //va0 is position renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //va1 is color //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair ); render(); toggler.start(); } private function render():void { //Clear required before first drawTriangles() call renderContext.clear(); //Sciss a region excluding the outer 100 pixels of the viewport var scissor:Rectangle = new Rectangle( 100, 100, viewWidth - 200, viewHeight - 200 ); if( scissorOn ) renderContext.setScissorRectangle( scissor ); //on else renderContext.setScissorRectangle( null ); //off //Draw the triangles renderContext.drawTriangles( indexList, 0, 2 ); //Show the frame renderContext.present(); } private function toggleScissor( event:Event ):void { scissorOn = !scissorOn; render(); } } }
setStencilActions | () | yöntem |
public function setStencilActions(triangleFace:String = "frontAndBack", compareMode:String = "always", actionOnBothPass:String = "keep", actionOnDepthFail:String = "keep", actionOnDepthPassStencilFail:String = "keep"):void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
Şablon modunu ve işlemi ayarlar.
8 bit şablon başvurusu değeri her çizim çağrısıyla ilişkilendirilebilir. Görüntü oluşturma sırasında, başvuru değeri çerçeve arabelleğinde önceden saklanmış değerlere göre test edilebilir. Testin sonucu çizim eylemini ve saklı şablon değerinin güncellenip güncellenmediğini veya nasıl güncellendiğini kontrol edebilir. Ayrıca, derinlik testi şablon testinin gerçekleştirilip gerçekleştirilmediğini de kontrol eder. Başarısız olan bir derinlik testi ayrıca şablon arabelleğinde gerçekleştirilen eylemi denetlemek için de kullanılabilir.
Piksel işleme komut zincirinde önce derinlik testi gerçekleştirilir. Derinlik desti başarısız olursa, şablon arabelleğini güncelleme eylemi gerçekleştirilebilir. Ancak, şablon arabelleği değeriyle ilgili daha fazla değerlendirme yapılamaz. Derinlik testi başarılı olursa, ardından şablon testi gerçekleştirilir. Şablon testinin sonucuna göre alternatif işlemler uygulanabilir.
Şablon başvurusu değeri setStencilReferenceValue()
öğesi kullanılarak ayarlanır.
Parametreler
triangleFace:String (default = "frontAndBack ") — şablon işlemine katkıda bulunmasına izin verilen üçgen yönlendirmeleri. Context3DTriangleFace öğelerinden biri.
| |
compareMode:String (default = "always ") — geçerli şablon başvuru değerini ve hedef piksel şablonu değerini karşılaştırmak için kullanılan test işleci. Karşılaştırma true ise, hedef piksel rengi ve derinlik güncellemesi gerçekleştirilir. Şablon eylemleri aşağıdaki eylem parametrelerinde istenildiği şekilde gerçekleştirilir. Karşılaştırma işleci, kaynak ve hedef başvuru değerlerinin arasına bir içek işleci olarak bu şekilde uygulanır (sahte kod şeklinde: stencilReference OPERATOR, stencilbuffer ise geçer ). Context3DCompareMode sınıfında tanımlanan sabitlerden birini kullanın.
| |
actionOnBothPass:String (default = "keep ") — hem derinlik hem de şablon karşılaştırmaları başarılı olduğunda gerçekleştirilecek eylem. Context3DStencilAction sınıfında tanımlanan sabitlerden birini kullanın.
| |
actionOnDepthFail:String (default = "keep ") — derinlik karşılaştırması başarısız olduğunda gerçekleştirilecek eylem. Context3DStencilAction sınıfında tanımlanan sabitlerden birini kullanın.
| |
actionOnDepthPassStencilFail:String (default = "keep ") — derinlik karşılaştırması başarılı olduğunda ve şablon karşılaştırması başarısız olduğunda gerçekleştirilecek eylem. Context3DStencilAction sınıfında tanımlanan sabitlerden birini kullanın.
|
Atar
Error — Geçersiz Numaralandırma Hatası: triangleFace değeri, Context3DTriangleFace sınıfında tanımlanan değerlerden biri olmadığında.
| |
Error — Geçersiz Numaralandırma Hatası: compareMode değeri, Context3DCompareMode sınıfında tanımlanan değerlerden biri olmadığında.
| |
Error — Geçersiz Numaralandırma Hatası: actionOnBothPass , actionOnDepthFail veya actionOnDepthPassStencilFail , Context3DStencilAction sınıfında tanımlanan değerlerden biri olmadığında.
|
İlgili API Öğeleri
Örnek ( Bu örnek nasıl kullanılır? )
- Şablon arabelleğini 0 yapar.
- Şablon testi geçtiğinde, artacak şablon eylemini ayarlar.
- Şablon başvuru değerini 0 olarak ayarlar.
- Üçgen maskeyi çizer. Şablon arabelleği 0 olarak temizlendiğinden ve başvuru değeri 0 olduğundan üçgenin çizildiği her yerde şablon testi geçer. Sonuç olarak, üçgen maskenin çizildiği yerde şablon arabelleği 1'e artırılır.
- Sonraki çizim işlemlerinin şablon arabelleğini değiştirmemesini sağlamak için korunacak şablon eylemini değiştirir.
- Tam ekran bir dikdörtgen çizer (birden fazla renkli). Şablon başvuru değeri hala 0 olduğundan şablon testi, maskelenmiş alanda başarısız olur. Bu nedenle dikdörtgen, maskelenmiş bölge hariç her yerde çizim yapar.
- Şablon başvuru değerini 1 olarak değiştirir.
- Başka bir tam ekran dikdörtgen (kırmızı) çizer. Artık şablon testi, 1'e artırılmış olan maskelenmiş alan hariç her yerde başarısız olur. Bu nedenle dikdörtgen, yalnızca maskelenmiş bölgede çizim yapar.
Ana adımları sıralı olarak görmek için fareyi örneğin üzerine getirin.
package { import com.adobe.utils.AGALMiniAssembler; import flash.display.Sprite; import flash.display.Stage3D; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.display3D.Context3D; import flash.display3D.Context3DBlendFactor; import flash.display3D.Context3DCompareMode; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DRenderMode; import flash.display3D.Context3DStencilAction; import flash.display3D.Context3DTriangleFace; import flash.display3D.Context3DVertexBufferFormat; import flash.display3D.IndexBuffer3D; import flash.display3D.Program3D; import flash.display3D.VertexBuffer3D; import flash.events.Event; import flash.events.KeyboardEvent; import flash.events.MouseEvent; import flash.events.TimerEvent; import flash.geom.Rectangle; import flash.text.TextField; import flash.text.TextFormat; import flash.ui.Keyboard; import flash.utils.Timer; public class Context3D_Stencil extends Sprite { public const viewWidth:Number = 350; public const viewHeight:Number = 240; private var stage3D:Stage3D; private var renderContext:Context3D; private var indexList:IndexBuffer3D; private var vertexes:VertexBuffer3D; private const VERTEX_SHADER:String = "mov op, va0 \n" + //copy position to output "mov v0, va1"; //copy color to varying variable v0 private const FRAGMENT_SHADER:String = "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var programPair:Program3D; public function Context3D_Stencil() { stage3D = this.stage.stage3Ds[0]; stage3D.x = 10; stage3D.y = 10; //Add event listener before requesting the context stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated ); stage3D.requestContext3D( Context3DRenderMode.AUTO ); //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); non3DSetup(); } //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process private function contextCreated( event:Event ):void { renderContext = Stage3D( event.target ).context3D; trace( "3D driver: " + renderContext.driverInfo ); renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing renderContext.configureBackBuffer( viewWidth, viewHeight, 2, true ); //Create vertex index list for the triangles var triangles:Vector.<uint> = Vector.<uint>( [ 0, 3, 2, 0, 1, 3, 4, 7, 6, 4, 5, 7, 8, 9, 10 ] ); indexList = renderContext.createIndexBuffer( triangles.length ); indexList.uploadFromVector( triangles, 0, triangles.length ); //Create vertexes const dataPerVertex:int = 6; var vertexData:Vector.<Number> = Vector.<Number>( [ //x, y, z r,g,b format -1, 1, 0, 1,0,0, 1, 1, 0, 0,0,1, -1,-1, 0, 0,1,0, 1,-1, 0, 1,0,1, -1, 1, 0, .5,0,0, 1, 1, 0, .5,0,0, -1,-1, 0, .5,0,0, 1,-1, 0, .5,0,0, 0, .7,.1, 0,0,0, -.7,-.7,.1, 0,0,0, .7,-.7,.1, 0,0,0 ]); vertexes = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex ); vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex ); //Identify vertex data inputs for vertex program renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //va0 is position renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //va1 is color //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair ); render(); } private function render():void { //Clear, setting stencil to 0 renderContext.clear( .3, .3, .3, 1, 1, 0 ); //Draw stencil, incrementing the stencil buffer value renderContext.setStencilReferenceValue( 0 ); renderContext.setStencilActions( Context3DTriangleFace.FRONT_AND_BACK, Context3DCompareMode.EQUAL, Context3DStencilAction.INCREMENT_SATURATE ); if( state > 0 ) renderContext.drawTriangles( indexList, 12, 1 ); //Change stencil action when stencil passes so stencil buffer is not changed renderContext.setStencilActions( Context3DTriangleFace.FRONT_AND_BACK, Context3DCompareMode.EQUAL, Context3DStencilAction.KEEP ); //Draw quad -- doesn't draw where stencil has already drawn if( state > 1 ) renderContext.drawTriangles( indexList, 0, 2 ); //Change the reference to 1 so this quad only draws into stenciled area renderContext.setStencilReferenceValue( 1 ); if( state > 2 ) renderContext.drawTriangles( indexList, 6, 2 ); //Show the frame renderContext.present(); } //The rest of the code is for the example UI and timer private function doState( event:TimerEvent ):void { switch (state) { case 0: description.text = "Draw triangle with stencil action == increment"; state = 1; break; case 1: description.text = "Draw the first plane where stencil == 0"; state = 2; break; case 2: description.text = "Draw second plane where stencil == 1"; state = 3; break; case 3: description.text = "Clear, setting stencil to 0"; state = 0; break; default: description.text = ""; state = 0; } render(); } private var state:int = 3; private var stateTimer:Timer = new Timer( 1250 ); private var description:TextField = new TextField(); private function non3DSetup():void { //Setup timer to animate the stages of drawing the scene stateTimer.addEventListener( TimerEvent.TIMER, doState ); this.stage.addEventListener( MouseEvent.MOUSE_OVER, function(event:Event):void{stateTimer.start()} ); this.stage.addEventListener( MouseEvent.MOUSE_OUT, function(event:Event):void{stateTimer.stop()} ); description.height = 30; description.width = viewWidth; this.addChild( description ); description.y = viewHeight + 15; description.defaultTextFormat = new TextFormat( null, 18, 0xffffff ); description.text = "Mouse over to view."; //Allows mouse-over events var coverSprite:Sprite = new Sprite(); coverSprite.graphics.beginFill( 0, .01 ) coverSprite.graphics.lineTo( stage.stageWidth, 0 ); coverSprite.graphics.lineTo( stage.stageWidth, stage.stageHeight ); coverSprite.graphics.lineTo( 0, stage.stageHeight ); coverSprite.graphics.lineTo( 0, 0 ); this.addChild( coverSprite ); } } }
setStencilReferenceValue | () | yöntem |
public function setStencilReferenceValue(referenceValue:uint, readMask:uint = 255, writeMask:uint = 255):void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
Şablon testleri için kullanılan şablon karşılaştırma değerini ayarlar.
Başvuru değerinin yalnızca daha düşük olan 8 bitleri kullanılır. Şablon arabellek değerinin uzunluğu da 8 bittir. Şablon arabelleğini bir bit alanı olarak kullanmak için readMask
ve writeMask
öğelerini kullanın.
Parametreler
referenceValue:uint — başvuru değeri karşılaştırma testlerinde kullanılan 8 bitlik başvuru değeri.
| |
readMask:uint (default = 255 ) — hem geçerli şablon arabellek değerine hem de karşılaştırmadan önceki başvuru değerine uygulanan 8 bitlik bir maske.
| |
writeMask:uint (default = 255 ) — şablon arabelleğini güncellemeden önce başvuru değerine uygulanan 8 bitlik bir maske.
|
İlgili API Öğeleri
setTextureAt | () | yöntem |
public function setTextureAt(sampler:int, texture:flash.display3D.textures:TextureBase):void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
Parça programının doku girdisi kaydı olarak kullanılacak dokuyu belirtir.
Bir parça programı en fazla sekiz doku nesnesinden bilgi okuyabilir. Parça programının kullandığı örnekleyici kayıtlarından birine Texture veya CubeTexture nesnesi atamak üzere bu işlevi kullanın.
Not: Etkin parça programını daha az sayıda doku kullanan bir gölgelendiriciyle değiştirirseniz (setProgram
ile) kullanılmayan kayıtları null
değerine ayarlayın.
setTextureAt( 7, null );
Parametreler
sampler:int — örnekleyici kaydı dizini, 0 ila 7 arası bir değer
| |
texture:flash.display3D.textures:TextureBase — Texture veya CubeTexture örneği olmak üzere kullanılabilir hale getirilecek doku nesnesi.
|
Daha fazla bilgi
İlgili API Öğeleri
CubeTexture
setVertexBufferAt | () | yöntem |
public function setVertexBufferAt(index:int, buffer:VertexBuffer3D, bufferOffset:int = 0, format:String = "float4"):void
Dil Sürümü: | ActionScript 3.0 |
Çalışma Zamanı Sürümleri: | Flash Player 11, AIR 3 |
Tek bir köşe gölgelendirici programına ait bir girdiye hangi veri bileşenlerinin karşılık geldiğini belirtir.
VertexBuffer3D arabelleğindeki her köşe için tanımlanan verilerin hangi bileşenlerin, köşe programındaki hangi girdilere ait olduğunu belirlemek üzere setVertexBufferAt
yöntemini kullanın. Köşe başına ne kadar veri gerektiğini köşe programının geliştiricisi belirler. Veri 1 veya daha fazla VertexBuffer3D
akışından köşe gölgelendiricisi programının nitelik kayıtlarına eşlenir.
Köşe gölgelendiricisi tarafından tüketilen en küçük veri birimi 32 bitlik veridir. Köşe akışına giden kenardan uzaklıklar 32 bit katları olarak belirtilir.
Örnek olarak, bir programcı her köşeyi aşağıdaki verilerle tanımlayabilir:position: x float32 y float32 z float32 color: r unsigned byte g unsigned byte b unsigned byte a unsigned byteKöşenin bir VertexBuffer3D nesnesinde
buffer
olarak tanımlandığını varsayarsak bir köşe gölgelendiriciye aşağıdaki kodla atanmış olabilir:
setVertexBufferAt( 0, buffer, 0, Context3DVertexBufferFormat.FLOAT_3 ); // attribute #0 will contain the position information setVertexBufferAt( 1, buffer, 3, Context3DVertexBufferFormat.BYTES_4 ); // attribute #1 will contain the color information
Parametreler
index:int — Köşe gölgelendiricideki nitelik kaydı dizini (0 ila 7).
| |
buffer:VertexBuffer3D — köşe gölgelendiriciye verilecek kaynak köşe verisini içeren arabellek.
| |
bufferOffset:int (default = 0 ) — bu niteliğin okunmaya başlayacağı tek bir köşe için veri başlangıcının kenar uzaklığı. İlk nitelik olduğundan yukarıdaki örnekte konum verilerinin kenardan uzaklığı 0'dır; renk niteliği üç adet 32 bitlik konum değerini izlediğinden rengin kenardan uzaklığı ise 3'tür. Kenardan uzaklık 32 bitlik birimler halinde belirtilir.
| |
format:String (default = "float4 ") — bu niteliğin veri türünü belirten Context3DVertexBufferFormat sınıfından bir değer.
|
Atar
Error — Geçersiz Numaralandırma: Biçim, Context3DVertexBufferFormat sınıfında tanımlanan değerlerden biri olmadığında.
| |
RangeError — Nitelik Kaydı Sınırı Aştı: index parametresi 0 ila 7 aralığının dışına çıktığında. (Bir gölgelendirici en fazla sekiz köşe niteliği kaydı kullanabilir.)
|
Daha fazla bilgi
İlgili API Öğeleri
package { import com.adobe.utils.AGALMiniAssembler; import com.adobe.utils.PerspectiveMatrix3D; import flash.display.Sprite; import flash.display.Stage3D; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.display3D.Context3D; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DRenderMode; import flash.display3D.Context3DTriangleFace; import flash.display3D.Context3DVertexBufferFormat; import flash.display3D.IndexBuffer3D; import flash.display3D.Program3D; import flash.display3D.VertexBuffer3D; import flash.events.ErrorEvent; import flash.events.Event; import flash.geom.Matrix3D; import flash.geom.Vector3D; public class Context3DExample extends Sprite { public const viewWidth:Number = 320; public const viewHeight:Number = 200; public const zNear:Number = 1; public const zFar:Number = 500; public const fov:Number = 45; private var stage3D:Stage3D; private var renderContext:Context3D; private var indexList:IndexBuffer3D; private var vertexes:VertexBuffer3D; private var projection:PerspectiveMatrix3D = new PerspectiveMatrix3D(); private var model:Matrix3D = new Matrix3D(); private var view:Matrix3D = new Matrix3D(); private var finalTransform:Matrix3D = new Matrix3D(); //For rotating the cube private const pivot:Vector3D = new Vector3D(); private const VERTEX_SHADER:String = "m44 op, va0, vc0 \n" + // 4x4 matrix transform "mov v0, va1"; //copy color to varying variable v0 private const FRAGMENT_SHADER:String = "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var programPair:Program3D; public function Context3DExample() { this.stage.scaleMode = StageScaleMode.NO_SCALE; this.stage.align = StageAlign.TOP_LEFT; this.stage.nativeWindow.activate(); //AIR only stage3D = this.stage.stage3Ds[0]; stage3D.x = 10; stage3D.y = 10; //Add event listener before requesting the context stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated ); stage3D.addEventListener( ErrorEvent.ERROR, contextCreationError ); stage3D.requestContext3D( Context3DRenderMode.AUTO ); //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); } //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process private function contextCreated( event:Event ):void { renderContext = Stage3D( event.target ).context3D; trace( "3D driver: " + renderContext.driverInfo ); setupScene(); } private function setupScene():void { renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing renderContext.configureBackBuffer( viewWidth, viewHeight, 2, false ); renderContext.setCulling( Context3DTriangleFace.BACK ); //Create vertex index list for the triangles forming a cube var triangles:Vector.<uint> = Vector.<uint>( [ 2,1,0, //front face 3,2,0, 4,7,5, //bottom face 7,6,5, 8,11,9, //back face 9,11,10, 12,15,13, //top face 13,15,14, 16,19,17, //left face 17,19,18, 20,23,21, //right face 21,23,22 ] ); indexList = renderContext.createIndexBuffer( triangles.length ); indexList.uploadFromVector( triangles, 0, triangles.length ); //Create vertexes - cube faces do not share vertexes const dataPerVertex:int = 6; var vertexData:Vector.<Number> = Vector.<Number>( [ // x,y,z r,g,b format 0,0,0, 1,0,0, //front face 0,1,0, 1,0,0, 1,1,0, 1,0,0, 1,0,0, 1,0,0, 0,0,0, 0,1,0, //bottom face 1,0,0, 0,1,0, 1,0,1, 0,1,0, 0,0,1, 0,1,0, 0,0,1, 1,0,0, //back face 1,0,1, 1,0,0, 1,1,1, 1,0,0, 0,1,1, 1,0,0, 0,1,1, 0,1,0, //top face 1,1,1, 0,1,0, 1,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,1, 0,0,1, //left face 0,1,0, 0,0,1, 0,0,0, 0,0,1, 0,0,1, 0,0,1, 1,1,0, 0,0,1, //right face 1,1,1, 0,0,1, 1,0,1, 0,0,1, 1,0,0, 0,0,1 ] ); vertexes = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex ); vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex ); //Identify vertex data inputs for vertex program renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //va0 is position renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //va1 is color //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair ); //Set up 3D transforms projection.perspectiveFieldOfViewRH( fov, viewWidth/viewHeight, zNear, zFar ); view.appendTranslation( 0, 0, -2 ); //Move view back model.appendTranslation( -.5, -.5, -.5 ); //center cube on origin this.stage.addEventListener( Event.ENTER_FRAME, render ); } private function render( event:Event ):void { //Rotate model on each frame model.appendRotation( .5, Vector3D.Z_AXIS, pivot ); model.appendRotation( .5, Vector3D.Y_AXIS, pivot ); model.appendRotation( .5, Vector3D.X_AXIS, pivot ); //Combine transforms finalTransform.identity(); finalTransform.append( model ); finalTransform.append( view ); finalTransform.append( projection ); //Pass the final transform to the vertex shader as program constant, vc0 renderContext.setProgramConstantsFromMatrix( Context3DProgramType.VERTEX, 0, finalTransform, true ); //Clear is required before drawTriangles on each frame renderContext.clear( .3,.3,.3 ); //Draw the 12 triangles that make up the cube renderContext.drawTriangles( indexList, 0, 12 ); //Show the frame renderContext.present(); } private function contextCreationError( error:ErrorEvent ):void { trace( error.errorID + ": " + error.text ); } } }
Tue Jun 12 2018, 01:09 PM Z