Ich möchte ein 3D-Volumen mit vtk.js rendern. Mein Problem ist, dass alle Tutorials/Beispiele in der vtk.js-Dokumentation vti
Dateien laden und rendern. In meinem Fall sind meine Daten nur eine Float32Array
, die die Werte eines 3D-Bildes enthält. Wie kann ich das mit vtk.js volume-rendern? Ich brauche eine Lösung, die keine zusätzlichen Dateien im Dateisystem erstellt.Wie man einen Float32Array Würfel mit vtk.js rendert?
1
A
Antwort
0
ich es geschafft (mit einer Hilfe der Mitarbeiter) einen zufälligen Würfel Volumen so zu machen:
// pseudo imports (avoids having to use fully qualified names)
var vtkFullScreenRenderWindow = vtk.Rendering.Misc.vtkFullScreenRenderWindow;
var vtkImageData = vtk.Common.DataModel.vtkImageData;
var vtkDataArray = vtk.Common.Core.vtkDataArray;
var vtkVolume = vtk.Rendering.Core.vtkVolume;
var vtkVolumeMapper = vtk.Rendering.Core.vtkVolumeMapper;
var vtkColorTransferFunction = vtk.Rendering.Core.vtkColorTransferFunction;
var vtkPiecewiseFunction = vtk.Common.DataModel.vtkPiecewiseFunction;
var VtkDataTypes = vtkDataArray.VtkDataTypes;
function initRandomCubeVolume() {
var width = 50, height = 50, depth = 50;
var size = width * height * depth;
var values = [];
for (var i = 0; i < size; i++) {
values[i] = Math.random();
}
var scalars = vtkDataArray.newInstance({
values: values,
numberOfComponents: 1, // number of channels (grayscale)
dataType: VtkDataTypes.FLOAT, // values encoding
name: 'scalars'
});
var imageData = vtkImageData.newInstance();
imageData.setOrigin(0, 0, 0);
imageData.setSpacing(1, 1, 1);
imageData.setExtent(0, width - 1, 0, height - 1, 0, depth - 1);
imageData.getPointData().setScalars(scalars);
var volumeMapper = vtkVolumeMapper.newInstance();
volumeMapper.setInputData(imageData);
volumeMapper.setSampleDistance(0.7);
var volumeActor = vtkVolume.newInstance();
volumeActor.setMapper(volumeMapper);
initProps(volumeActor.getProperty());
var view3d = document.getElementById("view3d");
var fullScreenRenderer = vtkFullScreenRenderWindow.newInstance({
rootContainer: view3d,
containerStyle: {
height: '100%',
overflow: 'hidden'
},
background: [0, 0, 0]
});
var renderer = fullScreenRenderer.getRenderer();
renderer.addVolume(volumeActor);
renderer.resetCamera();
renderer.getActiveCamera().elevation(-70);
renderer.updateLightsGeometryToFollowCamera();
var renderWindow = fullScreenRenderer.getRenderWindow();
renderWindow.render();
}
function initProps(property) {
property.setRGBTransferFunction(0, newColorFunction());
property.setScalarOpacity(0, newOpacityFunction());
property.setScalarOpacityUnitDistance(0, 4.5);
property.setInterpolationTypeToLinear();
property.setUseGradientOpacity(0, true);
property.setGradientOpacityMinimumValue(0, 0, 5);
property.setGradientOpacityMinimumOpacity(0, 0.0);
property.setGradientOpacityMaximumValue(0, 1);
property.setGradientOpacityMaximumOpacity(0, 1.0);
property.setShade(true);
property.setAmbient(0.2);
property.setDiffuse(0.7);
property.setSpecular(0.3);
property.setSpecularPower(8.0);
}
function newColorFunction() {
var fun = vtkColorTransferFunction.newInstance();
fun.addRGBPoint(0, 0.4, 0.2, 0.0);
fun.addRGBPoint(1, 1.0, 1.0, 1.0);
return fun;
}
function newOpacityFunction() {
var fun = vtkPiecewiseFunction.newInstance();
fun.addPoint(0, 0);
fun.addPoint(0.5, 0);
fun.addPoint(0.5, 1);
fun.addPoint(1, 1);
return fun;
}
initRandomCubeVolume();
#view3d { height: calc(100vh - 20px); /* avoid scrollbar because of margins */ }
<script src="https://unpkg.com/vtk.js"></script>
<div id="view3d"></div>
Verwandte Themen
- 1. Wie man einen 3D-Würfel in LWJGL rendert?
- 2. Wie löscht man einen SSAS-Würfel?
- 3. Wie man Bild mit OpenGL ES rendert?
- 4. Wie man einen Highscore in base.html rendert
- 5. Wie man einen Doctype mit Pythons xml.dom.minidom rendert?
- 6. Wie würde ich einen beliebigen Würfel in kleinere Würfel unterteilen?
- 7. Wie erstelle ich einen fraktalen Würfel?
- 8. Wie erstellt man einen bunten Würfel im A-Frame?
- 9. Wie man einen Würfel um seine Mitte dreht
- 10. Wie rendert man HTML mit Java?
- 11. Wie man Vorlage mit Koa rendert
- 12. Wie verarbeitet man ein Float32Array im Shader? (WebGL)
- 13. Wie man kundenspezifisches Feld mit to_xml rendert?
- 14. Wie man Emoji in mit QGraphicsTextItem rendert?
- 15. Wie man Kacheln mit Graphics.Draw effizient rendert?
- 16. Wie man große Webseiten rendert
- 17. Wie schiebe ich einen Würfel in Three.js
- 18. Wie über CSS einen 2D-Würfel Make
- 19. Wie man ein Regenbogenspektrum rendert?
- 20. threw.js Wie man einen einfachen weißen Punkt/Punkt/Pixel rendert
- 21. Wie man einen Formularfehler in roter Farbe rendert?
- 22. Sails.js - Wie man einen Teil von einem Controller rendert?
- 23. Javascript Float32Array Datei
- 24. Wie man einen Würfel mit horizontalem Gitter von 1 Würfel und vertikalem Gitter von einem anderen macht
- 25. Laravel: Wie man nur einen Abschnitt einer Vorlage rendert?
- 26. Wie man einen Blob auf einem Canvas-Element rendert?
- 27. Wie simuliere ich einen verbogenen 6-seitigen Würfel mit Pymc3?
- 28. Wie man einen Würfel mit regulären Schrittpunkten mit Matplotlib in Python plottet
- 29. Wie man einen css 3D Würfel mit Javascript und jQuery mit einem Knopf Auslöser
- 30. Wie man googlevis in flexdashboard rendert
Haben Sie jemals herausfinden, wie es zu tun? Ich versuche gerade das Gleiche zu machen. – DJDaveMark