VoxelServer/Laboratory/ChunkConcept.ipynb

140 lines
118 KiB
Plaintext
Raw Permalink Normal View History

2018-10-24 20:59:22 +02:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# simple Chunk Concept\n",
"---\n",
"Simple demonstration of how numpy arrays can be used for chunks"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import matplotlib.image as mpimg\n",
"import scipy.ndimage as ndimage\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* creat one global Chunk for this example"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# constants\n",
"CHUNK_SIDELENGTH = 16\n",
"N_BLOCKS = CHUNK_SIDELENGTH ** 3"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"# global chunk\n",
"chunk = np.zeros(shape=(CHUNK_SIDELENGTH, CHUNK_SIDELENGTH, CHUNK_SIDELENGTH), dtype=int)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* filling the Chunk with data. Here a volume with a sinusoid surface given by:\n",
"$$\n",
"y < \\frac{\\sin(x) + \\sin(y) + 2}{4} \\cdot \\text{CHUNK_SIDELENGTH}\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"for x in range(CHUNK_SIDELENGTH):\n",
" for y in range(CHUNK_SIDELENGTH):\n",
" for z in range(CHUNK_SIDELENGTH):\n",
" # y is height!\n",
" chunk[x,y,z] = 1 if y < ((np.sin(x) + np.sin(z) + 2) / 4) * CHUNK_SIDELENGTH else 0\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* plotting the chunk (**NOTE**: this is not suitable for realtime rendering!)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from mpl_toolkits.mplot3d import Axes3D\n",
"fig = plt.figure()\n",
"ax = fig.gca(projection='3d')\n",
"\n",
"plot = ax.voxels(np.rollaxis(chunk,2), edgecolor='k')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.7rc1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}